1. android中怎麼啟動關閉Service及功能解釋
1、 Service不是分離開的進程,除非其他特殊情況,它不會運行在自己的進程,而是作為啟動運行它的進程的一部分。
2、 Service不是線程,這意味著它將在主線程里勞作。
啟動service有兩種方法:
1、 Context.startService()
調用者與服務之間沒有關聯,即使調用者退出,服務仍可運行
2、 Context.bindService()
調用者與服務綁定在一起,調用者一旦退出,服務也就終止
Service的生命周期
如果使用startService()啟動service,系統將通過傳入的Intent在底層搜索相關符合Intent裡面信息的service。如果服務沒有啟動則先運行onCreate,然後運行onStartCommand (可在裡面處理啟動時傳過來的Intent和其他參數),直到明顯調用stopService或者stopSelf才將停止Service。無論運行startService多少次,只要調用一次stopService或者stopSelf,Service都會停止。使用stopSelf(int)方法可以保證在處理好intent後再停止。
控制service運行的主要方式有兩種,主要是根據onStartCommand方法返回的數值。方法:
1、START_STICKY
2、START_NOT_STICKY or START_REDELIVER_INTENT
這里主要解釋這三個變數的意義:
1、 START_STICKY
在運行onStartCommand後service進程被kill後,那將保留在開始狀態,但是不保留那些傳入的intent。不久後service就會再次嘗試重新創建,因為保留在開始狀態,在創建 service後將保證調用onstartCommand。如果沒有傳遞任何開始命令給service,那將獲取到null的intent
2、 START_NOT_STICKY
在運行onStartCommand後service進程被kill後,並且沒有新的intent傳遞給它。Service將移出開始狀態,並且直到新的明顯的方法(startService)調用才重新創建。因為如果沒有傳遞任何未決定的intent那麼service是不會啟動,也就是期間onstartCommand不會接收到任何null的intent。
2. Android 開機自啟動service實踐
Android 設備啟動的時候,會發送android.intent.action.BOOT_COMPLETED的廣播,監聽這個廣播來實現開機自啟動。
1) 創建需要的service和 BroadcastReceiver
2) 在AndroidManifest.xml 注冊service 和BroadcastReceiver
3)申明許可權
```
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
}
3. android 啟動service的兩種方式有什麼不同
Service的生命周期Service的生命周期方法比Activity少一
些,只有onCreate,onStart,onDestroy
我們有兩種方式啟動一個Service,他們對Service生命周期
的影響是不一樣的。
1;通過startService:
Service會經歷onCreate->onStart,
stopService的時候直接onDestroy如果是調用者(TestServiceHolder)自己直接退出而沒有調用stopService的話,Service會一直在後台運行。下次TestServiceHolder再起來可以stopService。
2:通過bindService:
Service只會運行onCreate,這個時候TestServiceHolder和TestService綁定在一起
TestServiceHolder退出了,Srevice就會調用onUnbind->onDestroyed所謂綁定在一起就共存亡了。
那有同學問了,要是這幾個方法交織在一起的話,會出現什麼情況呢?
一個原則是Service的onCreate的方法只會被調用一次,就是你無論多少次的
startService又bindService,Service只被創建一次。如果先是bind了,那麼start的時候就直接運行Service的onStart方法,如果先是start,那麼bind的時候就直接運行onBind方法。如果你先bind上了,就
stop不掉了,對啊,就是stopService不好使了,只能先UnbindService,再StopService,
所以是先start還是先bind行為是有區別的。