亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

Android Service生命周期詳解

2020-04-11 11:18:14
字體:
來源:轉載
供稿:網友

引言

應用程序組件有一個生命周期――一開始Android實例化他們響應意圖,直到結束實例被銷毀。在這期間,他們有時候處于激活狀態,有時候處于非激活狀 態;對于活動,對用戶有時候可見,有時候不可見。組件生命周期將討論活動、服務、廣播接收者的生命周期――包括在生命周期中他們可能的狀態、通知狀態改變 的方法、及這些狀態的組件寄宿的進程被終結和實例被銷毀的可能性。

上篇Android開發之旅:組件生命周期(一)講解了論活動的生命周期及他們可能的狀態、通知狀態改變的方法。本篇將介紹服務和廣播接收者的生命周期:

服務生命周期

廣播接收者生命周期

1、服務生命周期

一個服務可以用在兩個方面:

它可以啟動且允許一直運行直到有人停止它,或者它自己停止。在這種模式,通過調用Context.startService()啟動服務及通過調用 Context.stopService()停止服務。服務也可以通過調用Service.stopSelf()或 Service.stopSelfResult()停止自己。僅需要調用一次stopService()停止服務,而不管調用 startService()了多少次。

通過使用相關接口可以編程地操作服務??蛻舳私⑴cService對象的一個連接及使用該連接調入服務。連接通過調用 Context.bindService()建立,通過調用Context.unbindService()關閉。多個客戶端可以綁定到同一個服務。如果 服務尚未啟動,bindService()可以選擇啟動它。

這兩種模式并不是完全分離的。你可以綁定到一個用startService()啟動的服務。例如,一個后臺音樂服務可以通過使用定義了音樂播放的 Intent對象調用startService()啟動。直到后來,用戶可能想對播放器做一些控制或者獲取當前歌曲的一些信息,一個活動將調用 bindService()與服務建立連接。在這種情況下,實際上直到最后一個綁定關閉stopService()并不會停止。

像活動一樣,一個服務也有生命周期方法,你可以執行監視它的狀態改變。但是比活動的生命周期方法更少,只有三個且它們是公有的(public)而不是受保護的(protected)(說明:活動的生命周期方法是protected的):

void onCreate()
void onStart(Intent intent)
void onDestory()

通過這三個方法,你可以監視服務生命周期的兩個嵌套循環:

服務的整個生命時間(entire lifetime),從調用onCreate()到相應地調用onDestory()。像一個活動一樣,服務在onCreate()中做一些初始設置,且 在中釋放所有的資源。例如,一個音樂播放服務可以在onCreate()中創建線程,然后在onDestory()中停止線程。

服務的活躍生命時間(active lifetime),從調用onStart()開始。這個方法傳遞參數是傳送給startService()的Intent對象。音樂服務將打開Intent,了解播放哪個音樂并且開始播放。

沒有相應的回調方法,因為服務停止沒有onStop()方法。

startService()和onDestory()被所有服務調用,不管是通過Context.startService()啟動還是通過 Context.bindService()啟動的。然而,onStart()僅被通過startService()啟動的服務調用。
如果一個服務允許別的綁定到它,有一些額外的回調方法來實現它:

IBinder onBind(Intent intent)
boolean onUnbind(Intent intent)
void onRebind(Intent intent)

onBind()回調傳遞的參數是傳給bindService()的Intent對象,onUnbind()回調傳遞的參數是傳給 unbindService()的Intent對象。如果服務允許綁定,onBind()返回客戶端與服務交互的通信通道。onUnbind()方法可以 要求調用onRebind(),如果一個新的客戶端連接到服務。

下圖解釋了服務的回調方法。雖然,它分離了由startService()啟動的服務和由bindService()啟動的服務,記住任何服務,無論 它怎么啟動的,都可能允許客戶端綁定到它,因此任何服務可能接收onBind()和onUnbind()調用。

可以發現第一次startService時,會調用onCreate和onStart,在沒有stopService前,無論點擊多少次 startService,都只會調用onStart。而stopService時調用onDestroy。再次點擊stopService,會發現不會 進入service的生命周期的,即不會再調用onCreate,onStart和onDestroy。

而onBind在startService/stopService中沒有調用。

需要注意一個問題,當Activity退出的時候,Sercvice并不會停止,此時我們可以再進入Activity重新綁定,當這時候Service 就會調用onRebind()方法,但是調用onRebind()方法的前提是先前的onUnbind()方法執行成功,但是使用 super.onUnbind(intent)是執行不成功的,這時候我們要手動的使其返回true,再次綁定時Rebind()就會執行。否則,如果退 出時不顯示的指定onUnbind()為成功的話(為false),那么重新啟動此Activity來綁定服務時,Service的onBind()方法 和onReBind都不會執行,但是ServiceConnection方法確一定會回調了。這說明在Service中的onBind()方法不同于 onStart()方法不能被重復調用。

2、廣播接收者生命周期

一個廣播接收者有一個回調方法:void onReceive(Context curContext, Intent broadcastMsg)。當一個廣播消息到達接收者是,Android調用它的onReceive()方法并傳遞給它包含消息的Intent對象。廣 播接收者被認為僅當它執行這個方法時是活躍的。當onReceive()返回后,它是不活躍的。

有一個活躍的廣播接收者的進程是受保護的,不會被殺死。但是系統可以在任何時候殺死僅有不活躍組件的進程,當占用的內存別的進程需要時。

這帶來一個問題,當一個廣播消息的響應時費時的,因此應該在獨立的線程中做這些事,遠離用戶界面其它組件運行的主線程。如果onReceive()衍 生線程然后返回,整個進程,包括新的線程,被判定為不活躍的(除非進程中的其它應用程序組件是活躍的),將使它處于被殺的危機。解決這個問題的方法是 onReceive()啟動一個服務,及時服務做這個工作,因此系統知道進程中有活躍的工作在做。

ps:Service 類兩種啟動方法:

• Context.startService()
• Context.bindService()

1.  在同一個應用任何地方調用 startService() 方法就能啟動 Service 了,然后系統會回調 Service 類的 onCreate() 以及 onStart() 方法。這樣啟動的 Service 會一直運行在后臺,直到 Context.stopService() 或者 selfStop() 方法被調用。
另外如果一個 Service 已經被啟動,其他代碼再試圖調用 startService() 方法,是不會執行 onCreate() 的,但會重新執行一次 onStart() 。

2. 另外一種 bindService() 方法的意思是,把這個 Service 和調用 Service 的客戶類綁起來,如果調用這個客戶類被銷毀,Service 也會被銷毀。用這個方法的一個好處是,bindService() 方法執行后 Service 會回調上邊提到的 onBind() 方發,你可以從這里返回一個實現了 IBind 接口的類,在客戶端操作這個類就能和這個服務通信了,比如得到 Service 運行的狀態或其他操作。如果 Service 還沒有運行,使用這個方法啟動 Service 就會 onCreate() 方法而不會調用 onStart()。

總結:

1. startService()的目的是回調onStart()方法,onCreate() 方法是在Service不存在的時候調用的,如果Service存在(例如之前調用了bindService,那么Service的onCreate方法已經調用了)那么startService()將跳過onCreate() 方法。

2.  bindService()目的是回調onBind()方法,它的作用是在Service和調用者之間建立一個橋梁,并不負責更多的工作(例如一個Service需要連接服務器的操作),一般使用bindService來綁定到一個現有的Service(即通過StartService啟動的服務)。

由于Service 的onStart()方法只有在startService()啟動Service的情況下才調用,故使用onStart()的時候要注意這點。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲第一页中文字幕| 欧美一区视频在线| 日韩中文字幕网站| 国产www精品| 中文国产成人精品久久一| 日韩国产精品亚洲а∨天堂免| 青青久久aⅴ北条麻妃| 欧美一区二区.| 尤物yw午夜国产精品视频| 青青草国产精品一区二区| 日本欧美黄网站| 国产福利精品视频| 欧美日韩精品二区| 欧美伊久线香蕉线新在线| 亚洲精品美女久久| 97**国产露脸精品国产| 国产中文字幕日韩| 日韩欧美综合在线视频| 亚洲欧洲在线视频| 亚洲一区二区三区毛片| 欧美一级电影免费在线观看| 伊人伊人伊人久久| 亚洲国产精品久久久久秋霞蜜臀| 亚洲性视频网址| 日韩精品中文字幕在线播放| 尤物yw午夜国产精品视频明星| 国产精品久久久久av免费| 欧美怡红院视频一区二区三区| 中文字幕综合一区| 国产精品视频白浆免费视频| 国产精品自拍偷拍| 美女黄色丝袜一区| 国产日韩欧美电影在线观看| 在线看日韩欧美| 日韩欧美大尺度| 91精品国产自产在线观看永久| 国产成人综合精品在线| 色悠悠国产精品| 亚洲国产91精品在线观看| 国产成人一区二| 欧美视频中文在线看| 国产不卡精品视男人的天堂| 91香蕉嫩草影院入口| 久久精品久久久久久国产 免费| 国产欧美一区二区三区视频| 日韩av片电影专区| 亚洲福利在线播放| 精品福利免费观看| 午夜精品久久久久久久白皮肤| 亚洲一级黄色av| 日韩精品极品视频免费观看| 欧美日韩性视频| 久久夜色撩人精品| 成人h猎奇视频网站| 欧美日韩国产123| 欧美激情女人20p| 精品夜色国产国偷在线| 亚洲国产精品小视频| 91精品国产91| 成人在线视频福利| 成人在线国产精品| 91精品视频在线免费观看| 国产午夜精品一区理论片飘花| 亚洲视频专区在线| 91精品国产电影| 欧美国产亚洲视频| 午夜精品在线观看| 国产一区香蕉久久| 亚洲视频欧洲视频| 欧美激情一区二区三区高清视频| 懂色av一区二区三区| 欧美性xxxx极品hd欧美风情| 国产精品久久久久久久久免费看| 欧美激情视频在线免费观看 欧美视频免费一| 色噜噜国产精品视频一区二区| 国产精品激情av在线播放| 欧美日韩亚洲精品一区二区三区| 成人精品久久av网站| 日韩精品欧美国产精品忘忧草| 中文字幕精品国产| 国产精品观看在线亚洲人成网| 日韩欧美主播在线| 亚洲老头同性xxxxx| 日韩成人性视频| 3344国产精品免费看| 日韩在线观看高清| 97超碰国产精品女人人人爽| 国产成人午夜视频网址| 久久在线免费观看视频| 亚洲美女www午夜| 欧美视频裸体精品| 成人国产精品日本在线| 国内精品久久久久久| 亚洲自拍中文字幕| 亚洲日本成人网| 6080yy精品一区二区三区| 日韩欧美国产一区二区| 91精品久久久久久久久中文字幕| 不卡中文字幕av| 色伦专区97中文字幕| 国产精品爱啪在线线免费观看| 少妇av一区二区三区| 久久久久久97| 久久夜色精品亚洲噜噜国产mv| 国产啪精品视频网站| 久久99久国产精品黄毛片入口| 91九色单男在线观看| 韩国美女主播一区| 国产一区av在线| 日韩69视频在线观看| 欧美电影免费观看高清完整| 日韩电影中文字幕在线| 日韩亚洲在线观看| 欧美日韩电影在线观看| 久久久久久成人精品| 92国产精品久久久久首页| 国产精品一区二区久久久| 国产色婷婷国产综合在线理论片a| 成人性生交大片免费观看嘿嘿视频| 日韩精品极品视频免费观看| 色综合久久中文字幕综合网小说| 精品久久久在线观看| 亚洲综合日韩中文字幕v在线| 国产拍精品一二三| 亚洲欧洲免费视频| 亚洲爱爱爱爱爱| 亚洲欧美日韩高清| 国产91精品青草社区| 国产精品成人av性教育| 亚洲一区二区三区成人在线视频精品| 精品视频在线观看日韩| 久久久久久久久久国产精品| 日韩精品久久久久久福利| 欧美精品久久久久久久久久| 奇门遁甲1982国语版免费观看高清| 欧美极品美女视频网站在线观看免费| 欧美第一黄网免费网站| 91精品久久久久久久久青青| 亚洲第一页在线| 亚洲激情中文字幕| 日韩精品欧美激情| 欧美成人精品三级在线观看| 色哟哟网站入口亚洲精品| 国产午夜精品一区二区三区| 亚洲免费av电影| 国产精品va在线| 国产香蕉一区二区三区在线视频| 九色精品免费永久在线| 国产精品18久久久久久麻辣| 亚洲欧美另类中文字幕| 亚洲福利在线观看| 久久久综合av| 国产精品成人av在线| 91高清在线免费观看| 国产不卡一区二区在线播放| 亚洲国产精品va在线看黑人| 精品国偷自产在线视频99| 热久久视久久精品18亚洲精品| 91久热免费在线视频| 尤物99国产成人精品视频| 亚洲欧美一区二区三区四区| 久久成人亚洲精品| 韩曰欧美视频免费观看| 疯狂蹂躏欧美一区二区精品|