1:startService Service的生命周期:onCreate() --> onStart() -> onDestroy()
停止服務:service.stopService()2:bindServiceService的生命周期 onCreate() --> onBind() --> onUnBind() --> onDestroy()
停止服務:UnbindService()再StopService()
【在開發中我發發現,當app執行 PRocess.killProcess(Android.os.Process.myPid()) ; System.exet(0): 的時候】
系統會重啟service
針對不同版本的系統。有的系統會執行context.startService 而有的會 執行context.bindService
兩者唯一的相同點就是都會重啟service
使用startService()方法啟用服務,調用者與服務之間沒有關連,即使調用者退出了,服務仍然運行。使用bindService()方法啟用服務,調用者與服務綁定在了一起,調用者一旦退出,服務也就終止,大有“不求同時生,必須同時死”的特點。
一個原則是Service的onCreate的方法只會被調用一次,就是你無論多少次的startService又bindService,Service只被創建一次。如果先是bind了,那么start的時候就直接運行Service的onStart方法,如果先是start,那么bind的時候就直接運行onBind方法。如果你先bind上了,就stop不掉了,對啊,就是stopService不好使了,只能先UnbindService,再StopService,所以是先start還是先bind行為是有區別的。
如果打算采用Context.startService()方法啟動服務,在服務未被創建時,系統會先調用服務的onCreate()方法,接著調用onStart()方法。如果調用startService()方法前服務已經被創建,多次調用startService()方法并不會導致多次創建服務,但會導致多次調用onStart()方法。采用startService()方法啟動的服務,只能調用Context.stopService()方法結束服務,服務結束時會調用onDestroy()方法?! ∪绻蛩悴捎肅ontext.bindService()方法啟動服務,在服務未被創建時,系統會先調用服務的onCreate()方法,接著調用onBind()方法。這個時候調用者和服務綁定在一起,調用者退出了,系統就會先調用服務的onUnbind()方法,接著調用onDestroy()方法。如果調用bindService()方法前服務已經被綁定,多次調用bindService()方法并不會導致多次創建服務及綁定(也就是說onCreate()和onBind()方法并不會被多次調用)。如果調用者希望與正在綁定的服務解除綁定,可以調用unbindService()方法,調用該方法也會導致系統調用服務的onUnbind()-->onDestroy()方法.
新聞熱點
疑難解答