回覆列表
-
1 # 扶尾貓品茗花念伊
-
2 # 使用者3937226028394
Android中,當Service被kill後,如果重啟需要使用BroadcastReceiver來實現,即廣播接收者,例如利用BroadcastReceiver註冊網路廣播或者開關機廣播,當接收到廣播後直接啟動service,這樣就可以保證service被kill後,自動啟動。
實現程式碼:
1.在配置檔案AndroidManifest.xml中向系統註冊BroadcastReceiver
2.需要新增相應許可權
3.在Receiver中就可以新增開機,或者網路狀態改變後需要進行的操作
public class BootCompletedReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
}
}
4.執行操作,Intent intent = new Intent(context,Service.class); context.startService(intent); 這樣即可開機,或者網路狀態改變後啟動Service了。
只需要重新startService即可重新呼叫service的onStart()。
1.Service是在一段不定的時間執行在後臺,不和使用者互動應用元件。每個Service必須在manifest中透過<service>來宣告。可以透過contect.startservice和contect.bindserverice來啟動。
2.Service和其他的應用元件一樣,執行在程序的主執行緒中。這就是說如果service需要很多耗時或者阻塞的操作,需要在其子執行緒中實現。
service的兩種模式(startService()/bindService():
1.本地服務LocalService用於應用程式內部。
它可以啟動並執行,直至有人停止了它或它自己停止。在這種方式下,它以呼叫Context.startService()啟動,而以呼叫Context.stopService()結束。它可以呼叫Service.stopSelf()或Service.stopSelfResult()來自己停止。不論呼叫了多少次startService()方法,你只需要呼叫一次stopService()來停止服務。
用於實現應用程式自己的一些耗時任務,比如查詢升級資訊,並不佔用應用程式比如Activity所屬執行緒,而是單開執行緒後臺執行,這樣使用者體驗比較好。
2.遠端服務RemoteService用於android系統內部的應用程式之間。
它可以透過自己定義並暴露出來的介面進行程式操作。客戶端建立一個到服務物件的連線,並透過那個連線來呼叫服務。連線以呼叫Context.bindService()方法建立,以呼叫Context.unbindService()關閉。多個客戶端可以繫結至同一個服務。如果服務此時還沒有載入,bindService()會先載入它。