What is a service: a long running background with no interface components,
Android is an application scenario:
Weather forecast: The logic of the backend connection server to get the latest weather information every once in a while
Stock Display: Background of the logic of the connection server, every time to get the latest stock information
MP3 Player: Play music in the background for a long time.
New Thread () {}.start (); The child thread has no interface and is also long-running in the background.
The Android system process management is based on certain rules:
1. The process does not stop once the application is turned on and is normally closed (emptying the task stack). aspect of the next quick Launch.
A problem with low memory.
2.Android system has a set of memory cleaning mechanism. Recycle the memory of the system according to priority.
Process is divided into 5 priority levels: (from high to low)
1.Foreground process foreground process users are playing the application corresponding processes
2.Visible process visual processes users can still see the interface of this process.
The 3.Service Process Service processes application has a service component running in the background.
4.Background Process Daemon applications are running and minimized with no services (activity OnStop)
5.Empty process empty processes do not have any running activity, the task stack is empty
Long-running background components, do not open child threads in activity.
It should be creating a service that opens a child thread within the service.
Purpose of the service:
1. Long-term background operation.
2. Increase the priority of the process, the system is not easy to reclaim the process, even if the recovery, sufficient memory, the process to recreate.
Case scenario: Use a button to open the service and print the service startup status on the console. The program interface is as follows:
The 2 Android listing file is as follows:
<?xml version= "1.0" encoding= "Utf-8"?>
<manifest xmlns:android= "Http://schemas.android.com/apk/res/android"
Package= "Com.itheima.testservice"
Android:versioncode= "1"
Android:versionname= "1.0" >
<uses-sdk
Android:minsdkversion= "8"
Android:targetsdkversion= "/>"
<application
Android:allowbackup= "true"
android:icon= "@drawable/ic_launcher"
Android:label= "@string/app_name"
Android:theme= "@style/apptheme" >
<activity
Android:name= "Com.itheima.testservice.MainActivity"
Android:label= "@string/app_name" >
<intent-filter>
<action android:name= "Android.intent.action.MAIN"/>
<category android:name= "Android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<service android:name= "Com.itheima.testservice.MyService" ></service>
</application>
</manifest>
3 layout files are as follows:
<relativelayout xmlns:android= "Http://schemas.android.com/apk/res/android"
Xmlns:tools= "Http://schemas.android.com/tools"
Android:layout_width= "Match_parent"
android:layout_height= "Match_parent"
Tools:context= ". Mainactivity ">
<button
android:onclick= "click"
Android:layout_width= "Wrap_content"
android:layout_height= "Wrap_content"
Android:layout_centerhorizontal= "true"
Android:layout_centervertical= "true"
android:text= "Open service"/>
</RelativeLayout>
The code for the 4 mainactivity is as follows:
Package com.itheima.testservice;
Import android.app.Activity;
Import android.content.Intent;
Import Android.os.Bundle;
Import Android.view.View;
public class Mainactivity extends activity {
@Override
protected void OnCreate (Bundle savedinstancestate) {
Super.oncreate (savedinstancestate);
Setcontentview (R.layout.activity_main);
}
public void Click (View view) {
Intent Intent = new Intent (this,myservice.class);
StartService (Intent);
}
}
The code for the 5 MyService is as follows:
Package com.itheima.testservice;
Import Android.app.Service;
Import android.content.Intent;
Import Android.os.IBinder;
public class MyService extends Service {
@Override
Public IBinder Onbind (Intent Intent) {
return null;
}
OnCreate ondestory onstart onstop onresume onpause
@Override
public void OnCreate () {
SYSTEM.OUT.PRINTLN ("service created");
Super.oncreate ();
}
@Override
public int Onstartcommand (Intent Intent, int flags, int startid) {
SYSTEM.OUT.PRINTLN ("server");
Return Super.onstartcommand (Intent, flags, Startid);
}
@Override
public void OnDestroy () {
SYSTEM.OUT.PRINTLN ("server destroyed");
Super.ondestroy ();
}
}
6. Note on the recipient
Four components:
Activity
Content provider Provider
Broadcast receiver broadcast recipient
Service services
Radio: Send a broadcast
Radio: Accept the Radio
Broadcasts under the Android system:
Low battery charge.
Battery charge complete.
Message's coming.
Program Safety Loading and unloading
SD Card Uninstall Installation
1. Write a class to inherit the broadcast recipient
2. Configure the action of interest in the manifest file
3. Once the broadcast event occurs, the OnReceive method of the broadcast recipient is executed
Android invokes service method via broadcast receiver
Android invokes the service method through the broadcast receiver and registers the broadcast receiver with code (the only component in 4 large components that can use code declarations (activity Receiver provider service))
Service
Package Com.pas.callmethod;
Import Android.app.Service;
Import Android.content.BroadcastReceiver;
Import Android.content.Context;
Import android.content.Intent;
Import Android.content.IntentFilter;
Import Android.os.IBinder;
Import Android.widget.Toast;
public class MyService extends Service
{
Private Myreciver receiver;
@Override
public void OnCreate ()
{
Registering a broadcast receiver by code
Receiver=new Myreciver ();
Intentfilter filter=new Intentfilter ();
Filter.addaction ("Com.pas.call");
Registerreceiver (receiver, filter);
Super.oncreate ();
}
@Override
public void OnDestroy ()
{
Unregisterreceiver (receiver);
Receiver=null;
Super.ondestroy ();
}
@Override
Public IBinder Onbind (Intent arg0)
{
return null;
}
private void Method_inservice ()
{
Toast.maketext (Getapplicationcontext (), "My service method ...", Toast.length_short). Show ();
}
Private class Myreciver extends Broadcastreceiver
{
@Override
public void OnReceive (context arg0, Intent arg1)
{
SYSTEM.OUT.PRINTLN ("internal receiver");
Method_inservice ();
}
}
}
Mainac:
Package Com.pas.callmethod;
Import Android.os.Bundle;
Import android.app.Activity;
Import android.content.Intent;
Import Android.view.Menu;
Import Android.view.View;
public class Mainactivity extends activity
{
@Override
protected void OnCreate (Bundle savedinstancestate)
{
Super.oncreate (savedinstancestate);
Setcontentview (R.layout.activity_main);
Intent intent=new Intent (this,myservice.class);
StartService (Intent);
}
@Override
public boolean Oncreateoptionsmenu (Menu menu)
{
Inflate the menu; This adds items to the action bar if it is present.
Getmenuinflater (). Inflate (R.menu.main, menu);
return true;
}
public void Call (View v)
{
Send a custom broadcast
Intent intent=new Intent ();
Intent.setaction ("Com.pas.call");
Sendbroadcast (Intent);
}
}