亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Android SDK 1.5中文版 (Application基礎—5)

系統 1814 0

1.4 組件生命周期

應用程序組件都有生命周期——由Android實例化以響應Intent對象開始、直到這個實例被銷毀。在此期間,組件可以是激活或者非激活狀態。 如果是Activity,則還包括對用戶的可見或不可見狀態。本節討論Activity、服務以及廣播接收器的生命周期,包括它們在生命周期中的可能狀 態、在狀態轉變時調用的通知方法、以及當這些進程被關閉或實例被銷毀時,這些狀態產生的影響。

1.4.1 Activity生命周期

本質上Activity有三個狀態:

  • 當它在屏幕前臺時(位于當前任務堆棧的頂部),它是激活或運行狀態。它就是響應用戶操作的Activity。
  • 當它失去焦點但仍然對用戶可見時,它處于暫停狀態。即在它之上有另外一個Activity。這個Activity也許是透明的,或者沒有完全覆蓋 全屏,所以被暫停的Activity仍對用戶可見。暫停的Activity仍然是存活狀態(它保留著所有的狀態和成員信息并保持和窗口管理器的連接),但 系統處于極低內存時仍然可以殺死這個Activity。
  • 完全被另一個Activity覆蓋時則處于停止狀態。它仍然保留所有的狀態和成員信息。然而對用戶是不可見的,所以它的窗口將被隱藏,如果其它地方需要內存,則系統經常會殺死這個Activity。

如果Activity處于暫?;蛲V範顟B,系統可以通過要求它結束(調用它的 finish() 方法)或直接殺死它的進程來將它驅出內存。當它再次為用戶可見的時候,只能完全重新啟動并恢復至以前的狀態。

當Activity從一種狀態轉變到另一種狀態時,會調用以下保護方法來通知這種變化:

void onCreate(Bundle savedInstanceState)

void onStart()

void onRestart()

void onResume()

void onPause()

void onStop()

void onDestroy()

所有這些方法都被掛接,因此我們可以重載他們以在狀態改變時進行適當的處理。所有的Activity都必須實現 onCreate()來執行對象第一次實例化時的初始化。很多Activity會實現onPause()以提交數據變化或準備停止與用戶的交互。

所有Activity的生命周期方法實現中都必須先調用其父類的版本。比如說:

protected void onPause() {

super.onPause();

. . .

}

總得來說,這七個方法定義了Activity的完整生命周期。實現這些方法可以幫助我們監視其中的 三個嵌套生命周期循環

  • Activity 的完整生命周期 自第一次調用onCreate()開始,直至調用onDestroy()為 止。Activity在onCreate()中設置所有“全局”狀態以完成初始化,而在onDestroy()中釋放所有系統資源。例如,如果 Activity有一個線程在后臺運行從網絡上下載數據,它會在onCreate()創建線程,而在 onDestroy()銷毀線程。
  • Activity的 可視生命周期 自onStart()調用開始直到相應的onStop()調用結束。在此期 間,用戶可以在屏幕上看到Activity,盡管它也許并不是位于前臺或者也不與用戶進行交互。在這兩個方法之間,我們可以保留用來向用戶顯示這個 Activity所需的資源。例如,當用戶不再看見我們顯示的內容時,我們可以在onStart()中注冊一個BroadcastReceiver來監控 會影響UI的變化,而在onStop()中來注消。onStart() 和 onStop() 方法可以隨著應用程序是否為用戶可見而被多次調用。
  • Activity的 前臺生命周期 自onResume()調用起,至相應的onPause()調用為止。在此期 間,Activity位于前臺最上面并與用戶進行交互。Activity會經常在暫停和恢復之間進行狀態轉換——例如當設備轉入休眠狀態或者有新的 Activity啟動時,將調用onPause() 方法。當Activity獲得結果或者接收到新的Intent時會調用onResume() 方法。因此,這兩個方法中的代碼應當是輕量級的。

下圖展示了上述循環過程以及Activity在此過程中歷經的狀態改變。著色的橢圓是Activity可以經歷的主要狀態。矩形框表示在Activity狀態間發生改變的時候,我們可以實現的方法進行適當的處理。

下表詳細描述了這些方法,以及他們在Activity整個生命周期中的位置。

請注意上表中可被殺死一列。它標示了在方法返回后,還沒執行Activity的其余代碼的任意時間里,系統是否可以殺死包含此Activity的進程。三個方法(onPause()、 onStop()和onDestroy())被標記為“是”。 onPause()是 三個中的第一個,它也是 唯一一個在進程被殺死之前必然會調用的方法──onStop() 和 onDestroy() 有可能不被執行。因此你應該用 onPause() 來將所有持久性數據(比如用戶的編輯結果)寫入存儲之中。

在可被殺死一列中標記為“否”的方法在它們被調用時將保護Activity所在的進程不會被殺死。所以只有在onPause()方法返回后到 onResume() 方法被調用時,一個Activity才處于可被殺死的狀態。在onPause()再次被調用并返回之前,它不會被系統殺死。

如后面一節進程和生命周期所述,即使是在這里技術上沒有被定義為“可殺死”的Activity仍然有可能被系統殺死──但這僅會發生在實在沒有其它方法的極端情況之下。

保存Activity狀態

當系統而不是用戶自己出于回收內存的考慮,關閉了一個Activity之后。用戶會期望當他再次回到那個Activity的時候,它仍保持著上次離開時的樣子。

為了獲取Activity被殺死前的狀態,你應該為Activity實現onSaveInstanceState() 方法。Android在Activity有可能被銷毀之前(即onPause() 調用之前)會調用此方法。它會將一個以名稱-值對方式記錄了Activity動態狀態的Bundle 對象傳遞給該方法。當Activity再次啟動時,這個Bundle會傳遞給onCreate()方法和隨著onStart()方法調用的 onRestoreInstanceState(),所以它們兩個都可以恢復捕獲的狀態。

與onPause()或先前討論的其它方法不同,onSaveInstanceState() 和 onRestoreInstanceState() 并不是生命周期方法。它們并不是總會被調用。比如說,Android會在Activity易于被系統銷毀之前調用 onSaveInstanceState(),但用戶動作(比如按下了BACK鍵)造成的銷毀則不調用。在這種情況下,用戶沒打算再次回到這個 Activity,所以沒有保存狀態的必要。

因為onSaveInstanceState()不是總被調用,所以你應該只用它來為Activity保存一些臨時的狀態,而不能用來保存持久性數據。而是應該用onPause()來達到這個目的。

協調Activity

當一個Activity啟動了另外一個的時候,它們都會經歷生命周期變化。一個會暫停乃至停止,而另一個則啟動。這種情況下,可能需要協調好這些Activity:

生命周期回調順序是已經定義好的,尤其是在兩個Activity在同一個進程內的情況下:

1. 調用當前Activity的 onPause() 方法。

2. 接著,順序調用新啟動Activity的onCreate()、 onStart()和onResume()方法。

3. 然后,如果啟動的Activity不再于屏幕上可見,則調用它的onStop()方法。

Android SDK 1.5中文版 (Application基礎—5)


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲欧美另类在线 | 一类毛片 | 五月婷婷色综合 | 国产真实乱子伦精品视 | 五月天精品 | 日本精品在线观看视频 | 无遮挡又黄又爽又色的视频免费 | 欧美久久xxxxxx影院 | 国产伦精品一区二区三区无广告 | 久久国产精品一国产精品金尊 | 久久精品夜色国产 | 久久久久久久国产a∨ | 久久精品66 | 国产www网站| 男女一级毛片免费播放 | 亚洲精品成人一区二区 | 性欧美处| 高清国产一区二区 | 成人午夜大片 | 久久国产一区二区三区 | 日韩中文字幕精品 | 99热久久这里就有精品 | 日本精品区| 真91视频| 狠狠色婷婷狠狠狠亚洲综合 | 在线欧美精品一区二区三区 | 久久综合视频网站 | 亚洲国产精品免费视频 | 免费一级a毛片夜夜看 | 亚洲最新视频在线观看 | 日本亚洲成高清一区二区三区 | 久久久久久尹人网香蕉 | 狼狼色丁香久久婷婷综合五月 | 毛片爱做的片 | 欧美综合图区 | 精品国产一二三区在线影院 | 久草视频免费在线观看 | 在线99| 国产永久精品 | 最新中文字幕在线观看 | 国产激情久久久久影院小草 |