編輯:Android開發實例
應用程序組件有一個生命周期——一開始Android實例化他們響應意圖,直到結束實例被銷毀。在這期間,他們有時候處於激活狀態,有時候處於非激活狀態;對於活動,對用戶有時候可見,有時候不可見。組件生命周期將討論活動、服務、廣播接收者的生命周期——包括在生命周期中他們可能的狀態、通知狀態改變的方法、及這些狀態的組件寄宿的進程被終結和實例被銷毀的可能性。
上篇Android開發之旅:組件生命周期(一)講解了論活動的生命周期及他們可能的狀態、通知狀態改變的方法。本篇將介紹服務和廣播接收者的生命周期:
一個服務可以用在兩個方面:
這兩種模式並不是完全分離的。你可以綁定到一個用startService()啟動的服務。例如,一個後台音樂服務可以通過使用定義了音樂播放的Intent對象調用startService()啟動。直到後來,用戶可能想對播放器做一些控制或者獲取當前歌曲的一些信息,一個活動將調用bindService()與服務建立連接。在這種情況下,實際上直到最後一個綁定關閉stopService()並不會停止。
像活動一樣,一個服務也有生命周期方法,你可以執行監視它的狀態改變。但是比活動的生命周期方法更少,只有三個且它們是公有的(public)而不是受保護的(protected)(說明:活動的生命周期方法是protected的):
通過這三個方法,你可以監視服務生命周期的兩個嵌套循環:
startService()和onDestory()被所有服務調用,不管是通過Context.startService()啟動還是通過Context.bindService()啟動的。然而,onStart()僅被通過startService()啟動的服務調用。
如果一個服務允許別的綁定到它,有一些額外的回調方法來實現它:
onBind()回調傳遞的參數是傳給bindService()的Intent對象,onUnbind()回調傳遞的參數是傳給unbindService()的Intent對象。如果服務允許綁定,onBind()返回客戶端與服務交互的通信通道。onUnbind()方法可以要求調用onRebind(),如果一個新的客戶端連接到服務。
下圖解釋了服務的回調方法。雖然,它分離了由startService()啟動的服務和由bindService()啟動的服務,記住任何服務,無論它怎麼啟動的,都可能允許客戶端綁定到它,因此任何服務可能接收onBind()和onUnbind()調用。
一個廣播接收者有一個回調方法:void onReceive(Context curContext, Intent broadcastMsg)。當一個廣播消息到達接收者是,Android調用它的onReceive()方法並傳遞給它包含消息的Intent對象。廣播接收者被認為僅當它執行這個方法時是活躍的。當onReceive()返回後,它是不活躍的。
有一個活躍的廣播接收者的進程是受保護的,不會被殺死。但是系統可以在任何時候殺死僅有不活躍組件的進程,當占用的內存別的進程需要時。
這帶來一個問題,當一個廣播消息的響應時費時的,因此應該在獨立的線程中做這些事,遠離用戶界面其它組件運行的主線程。如果onReceive()衍生線程然後返回,整個進程,包括新的線程,被判定為不活躍的(除非進程中的其它應用程序組件是活躍的),將使它處於被殺的危機。解決這個問題的方法是onReceive()啟動一個服務,及時服務做這個工作,因此系統知道進程中有活躍的工作在做。
轉自:http://www.cnblogs.com/skynet/archive/2010/05/06/1729332.html
本文實例講述了Android編程實現ViewPager多頁面滑動切換及動畫效果的方法。分享給大家供大家參考,具體如下: 一、首先,我們來看一下效果圖,這是新浪微博
我們知道,在Android系統中,Activity是以堆棧的形式組織在ActivityManagerService服務中的。與Activity類似,Android
前面文章介紹了Activity以及Intent的使用,本文就來介紹Service。如果把Activity比喻為前台程序,那麼Service就是後台程序,Servi
Android應用程序可以在許多不同地區的許多設備上運行。為了使應用程序更具交互性,應用程序應該處理以適合應用程序將要使用的語言環境方面的文字,數字,文件等。在本章中,我