Service的啟動、繫結,以及生命週期的筆記
1、有關Service的startService與bindService在各種情形下生命週期的變化
參考:http://blog.csdn.net/qq_22804827/article/details/78609636
需要注意的是,startService
、stopService
、bindService
、unbindService
方法都是Context的成員方法。
Android Developers文章參考:
https://developer.android.com/guide/components/bound-services.html?hl=zh-cn
2、有關onCreate()、onStart()、onBind()等生命週期方法所在的執行緒
以前面的情景為基礎,如果在兩個Activity分別開啟一個子執行緒,在其中去startService和bindService,此時,就算是在子執行緒中執行這兩個方法,但是有關Service的生命週期方法都還是會在主執行緒中執行。
簡單的說明原因,就是Service的生命週期方法的呼叫都有藉助到ActivityThread中的H(本質上是一個Handler),通過H的相關方法來實現的,而ActivityThread則是UI執行緒,即主執行緒。
具體原因可參見《Android藝術探索》的“Service的工作過程“章節。
3、startCommand()方法返回值
(1)START_STICKY = 1
,當Service已經啟動後,如果startCommand方法返回值是這個,則表示如果記憶體不足Service被系統殺掉,系統會在後續記憶體空閒時嘗試著重新建立這個Service,但是不會再傳遞上次啟動Service時的Intent,onStartCommand中的Intent引數會為null。
(2)START_NOT_STICKY = 2
,系統把Service殺掉後,不會嘗試重新建立這個Service。
(3)START_REDELIVER_INTENT = 3
,系統把Service殺掉後,會嘗試重新建立這個Service,並且會把之前啟動Service的最後一個Intent重新傳遞回來。
4、有關bindService()方法的第三個引數
第三個引數是一個指示繫結選項的標誌。
由於本人暫時能力有限,無法完全正確理解某些標誌值的具體含義,翻閱一些部落格說得也是一知半解,有興趣的可以自行去看谷歌官方的文件,避免我在此誤導大家。
https://developer.android.com/reference/android/content/Context.html#BIND_AUTO_CREATE
Service的行為和執行模式,其中BIND_AUTO_CREATE和BIND_WAIVE_PRIORITY兩個flag在Ice Cream Sandwich也就是Android4.0版本前後有一些區別,主要是:
在4.0之前,Service的優先順序被預設視同後臺任務,如果設定了BIND_AUTO_CREATE則Service的優先順序將等同於宿主程式,也就是呼叫bindService的程式。
在4.0及以上就完全變了,Service的優先順序預設等同於宿主程式,只有設定了BIND_WAIVE_PRIORITY才會使Service的被當做後臺任務對待,WAIVE就是放棄的意思嘛。
基於上述區別,必須對不針對4.0以上開發的的App進行相容。這種App跑在4.0以上時,bindService的時候沒有同時設定BIND_AUTO_CREATE則Service應被視為後臺任務,那麼BIND_WAIVE_PRIORITY會被偷偷加上去。
來自:http://blog.csdn.net/pan11115111/article/details/70236354
補充內容:
如果設定Service於一個單獨的程式(具體的設定方法為在AndroidManifest檔案中為<service/>
標籤新增android:process
屬性即可),則其生命週期方法會執行於新建的程式。
具體原因需要參考Binder機制了。
相關文章
- Activity生命週期與啟動模式筆記模式筆記
- vue生命週期、雙向繫結Vue
- react生命週期筆記React筆記
- Fragment生命週期筆記Fragment筆記
- 信管筆記-- 生命週期筆記
- Activity的生命週期和啟動模式模式
- Service生命週期詳解
- JSP筆記-生命週期JS筆記
- React筆記(元件生命週期)React筆記元件
- minjun信管筆記-- 生命週期筆記
- docker筆記23-pod的生命週期Docker筆記
- React生命週期學習筆記React筆記
- React元件生命週期——精華筆記React元件筆記
- Activity生命週期與啟動模式模式
- Vue學習筆記(2)—— Vue的生命週期Vue筆記
- iOS-APP的啟動流程和生命週期iOSAPP
- Activity的生命週期和啟動模式詳解模式
- activity的生命週期(總結)
- Android Service生命週期淺析Android
- Android中bindService的使用及Service生命週期Android
- Android中startService的使用及Service生命週期Android
- Vue生命週期函式.個人筆記Vue函式筆記
- Android學習筆記04——Activity的生命週期Android筆記
- vue例項以及生命週期Vue
- Android 開發藝術探索筆記之一 -- Android 的生命週期和啟動模式Android筆記模式
- 如何繫結頁面生命週期(一)-Glide實現IDE
- iOS開發筆記(九):UIViewController的生命週期iOS筆記UIViewController
- Android Activity的生命週期和啟動模式詳解Android模式
- View生命週期與Activity生命週期的關係View
- java中cookie的存取刪以及用法生命週期JavaCookie
- React生命週期以及注意事項React
- iOS初級開發學習筆記:APP生命週期的學習總結iOS筆記APP
- vue生命週期總結Vue
- React生命週期總結React
- Activity生命週期總結
- fragment生命週期(總結)Fragment
- 生命週期階段與外掛目標的繫結關係
- Flutter 的生命週期Flutter