1. Service分類
1.1 Service的類型分類
1.2 特點
2.本地Service
2.1具體使用步驟
- 步驟1:新建子類繼承Service類
需重寫父類的onCreate()、onStartCommand()、onDestroy()和onBind()方法
- 步驟2:構建用于啟動Service的Intent對象
- 步驟3:調(diào)用startService()啟動Service、調(diào)用stopService()停止服務
- 步驟4:在AndroidManifest.xml里注冊Service
2.2實例DOME
- 步驟1:新建子類繼承Service類
需重寫父類的onCreate()、onStartCommand()、onDestroy()和onBind()
Myservice
public class MyService extends Service {
//啟動Service之后,就可以在onCreate()或onStartCommand()方法里去執(zhí)行一些具體的邏輯
//由于這里作Demo用,所以只打印一些語句
@Override
public void onCreate() {
super.onCreate();
System.out.println("執(zhí)行了onCreat()");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
System.out.println("執(zhí)行了onStartCommand()");
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
super.onDestroy();
System.out.println("執(zhí)行了onDestory()");
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
步驟2:在主布局文件設置兩個Button分別用于啟動和停止Service
activity_main.xml(代碼簡單所以過濾不寫)步驟3:構建Intent對象,并調(diào)用startService()啟動Service、stopService停止服務
MainActivity.java
public class MainActivity extends Activity {
private MyConn conn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
//點擊按鈕 開啟服務 通過startservice
public void click1(View v) {
Intent intent = new Intent(this,DemoService.class);
startService(intent); //開啟服務
}
public void click2(View v) {
Intent intent = new Intent(this,DemoService.class);
stopService(intent);
}
//點擊按鈕 綁定服務 開啟服務的第二種方式
public void click3(View v){
Intent intent = new Intent(this,DemoService.class);
//連接到DemoService 這個服務
conn = new MyConn();
bindService(intent,conn , BIND_AUTO_CREATE);
}
//點擊按鈕手動解綁服務
public void click4(View v){
unbindService(conn);
}
@Override
protected void onDestroy() {
//當Activity銷毀的時候 要解綁服務
unbindService(conn);
super.onDestroy();
}
//定義一個類 用來監(jiān)視服務的狀態(tài)
private class MyConn implements ServiceConnection{
//當服務連接成功調(diào)用
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
System.out.println("onServiceConnected");
}
//失去連接調(diào)用
@Override
public void onServiceDisconnected(ComponentName name) {
} }
}
- 步驟4:在AndroidManifest.xml里注冊Service
AndroidManifest.xml
//注冊Service服務
<service android:name=".MyService">
</service>
測試結果
Paste_Image.png
Androidmanifest里Service的常見屬性說明
屬性 | 說明 | 備注 |
---|---|---|
android:name | Service的類名 | |
android:label | Service的名字 | 若不設置,默認為Service類名 |
android:icon | Service的圖標 | |
android:permission | 申明此Service的權限 | 有提供了該權限的應用才能控制或連接此服務 |
android:process | 表示該服務是否在另一個進程中運行(遠程服務) | 不設置默認為本地服務;remote則設置成遠程服務 |
android:enabled | 系統(tǒng)默認啟動 | true:Service 將會默認被系統(tǒng)啟動;不設置則默認為false |
android:exported | 該服務是否能夠被其他應用程序所控制或連接 | 不設置默認此項為 false |
3. 常見的生命周期使用
Paste_Image.png
3.1 只使用startService啟動服務的生命周期
startService啟動服務的生命周期
3.2 只使用BindService綁定服務的生命周期
BindService綁定服務的生命周期
3.3 同時使用startService()啟動服務、BindService()綁定服務的生命周期