欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

Android開發之組件生命周期(一)

系統 1915 0

引言

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

本文主要討論活動的生命周期及他們可能的狀態、通知狀態改變的方法。分為以下三部分:

  • 1、活動生命周期
  • 2、保存活動狀態
  • 3、協調活動

1、活動生命周期

一個活動有三個基本狀態:

  • 激活狀態 運行狀態 ,這時它運行在屏幕的前臺(處于當前任務活動棧的最上面)。這個活動有用戶的操作的焦點。
  • 暫停狀態 ,這時活動失去焦點但是它對用戶仍可見。也就是說,另一個活動在它的上面且那個活動是透明的或者沒有覆蓋整個屏幕,因此通過它可以看見暫停狀態的活動。一個暫停的活動完全是活著的(它維護著所有的狀態和成員信息,且仍然依附在窗口管理器),但是 當內存極小時 可以被系統殺掉。
  • 停止狀態 ,這時活動完全被其他活動掩蓋。它仍然保留所有狀態和成員信息,但是對用戶它不可見,因此它的窗口時隱藏的且 當其他地方需要內存時 它往往被系統殺掉。

如果一個活動被暫?;蛲V?,系統可以將它從內存移除,通過要求它結束(通過調用它的 finish() 方法),或簡單地殺掉它的進程。當它再次顯示給用戶時,必須要完全重新啟動和恢復到之前的狀態。隨著活動從一個狀態轉為另一個狀態,通過調用下面的受保護的方法通知該改變:

  • void onCreate(Bundle saveInstanceState )
  • void onStart()
  • void onRestart()
  • void onResume()
  • void onPause()
  • void onStop()
  • void onDestroy()

所有這些方法都是鉤子,你可以重寫當狀態改變時做適當的工作。所有的活動必須要實現 onCreate() 去做一些初始化的設置,當對象第一次實例化的時候。很多活動也會實現 onPause() 去提交數據修改或準備停止與用戶交互。

將他們合并在一起,這七個方法定義了活動的整個生命周期。有三個嵌套的循環,你可以通過這七個方法監視:

  • 活動的整個生命時間 ,從第一次調用 onCreate() 開始直到調用 onDestroy() 結束。一個活動在 onCreate() 中做所有的“全局”狀態的初始設置,在 onDestroy() 中釋放所有保留的資源。舉例來說,有一個線程運行在后臺從網絡上下載數據,它可能會在 onCreate() 中創建線程,在 onDestroy() 中結束線程。
  • 活動的可視生命時間 ,從調用 onStart() 到相應的調用 onStop() 。在這期間,用戶可以在屏幕上看見活動,雖然它可能不是運行在前臺且與用戶交互。在這兩個方法之間,你可以保持顯示活動所需要的資源。舉例來說,你可以在 onStart() 中注冊一個廣播接收者監視影響你的UI的改變,在 onStop() 中注銷。因為活動在可視和隱藏之間來回切換, onStart() onStop() ? 可以調用多次。
  • 活動的前臺生命時間 ,從調用 onResume() 到相應的調用 onPause() 。在這期間,頻繁地在重用和暫停狀態轉換——例如,當設備進入睡眠狀態或一個新的活動啟動時調用 onPause() ,當一個活動返回或一個新的意圖被傳輸時調用 onResume() 。因此,這兩個方法的代碼應當是相當輕量級的。

下面這個圖解釋了這三個循環和狀態之間狀態的可能路徑。著色的橢圓表示活動的主要狀態,矩形表示當活動在狀態之間轉換時你可以執行的回調方法。

activity_lifecycle

?

?

?

?

?

?

?

?

圖1、活動生命周期(來源:Android SDK)

下面的表格對每個方法更詳細的描述和在活動的整個生命周期中的定位。

t1 t2

注意上面表格的 Killable 列,它表示當方法返回時沒有執行活動的其它代碼,系統是否能殺死活動寄宿的進程。三個方法( onPause() 、 onStop() 、 onDestroy() )標記為 Yes 。因為 onPause() 是唯一一個保證在進程被殺之前會調用的,因此你應該使用 onPause() 來寫任何持久化存儲數據。

被標記為 No 的方法保護活動寄宿的進程在他們調用的時候不會被殺掉。因此活動是可殺掉狀態,例如 onPause() 返回到 onResume() 調用期間。直到 onPause() 再次返回,活動是不可殺掉的。其實,沒有標記為 Killable 的活動也是可以系統被殺掉的,不過這僅僅發生在極端困難的情況下,沒有有任何其他資源可用。

2、保存活動狀態

當系統而不是用戶關閉一個活動來節省內存時,用戶可能希望返回到活動且是它之前的狀態。為了獲得活動被殺之前的狀態,你可以執行活動的 onSaveInstanceState() 方法。Android在活動容易被銷毀前調用這個方法,也就是調用 onPause() 之前。該方法的參數是一個 Bundle 對象,在這個對象你可以以名值對記錄活動的動態狀態。當活動再次啟動時, Bundle 同時被傳遞到 onCreate() 和調用 onCreate() 之后的方法, onRestoreInstanceState() ,因此使用一個或兩個可以重新創建捕獲的狀態。

因為 onSaveInstanceState() 方法不總是被調用,你應該僅使用 onSaveInstanceState() 它來記錄活動的臨時狀態,而不是持久的數據。應該使用 onPause() 來存儲持久數據。

3、協調活動

當一個活動啟動另一個活動,他們都經歷生命周期轉換。一個暫停或許是停止,然而另一個啟動。有時,你可能需要協調這些活動。生命周期的回調順序是明確界定的,特別是當這兩個活動在同一個進程中:

  1. 當前活動的 onPause() 方法被調用。
  2. 接下來,啟動活動的 onCreate() 、 onStart() onResume() 方法按序被調用。
  3. 然后,如果獲得不再在屏幕上可見,它的 onStop() 方法被調用。

修正 :第一節 —— 活動生命周期中的表格第一、二行中的第二列(description)中的onRestart()應該為onStart()。
1000多的點擊,居然沒有人發現這個錯誤,看了大家根本就沒認真看或者說根本沒有靜心看園子里的任何博文,心痛!還是水帖比較受歡迎。

Android開發之組件生命周期(一)


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

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

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

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲视频在线观看一区 | 亚洲精品久久久久中文字幕二区 | 91免费视频 | 自拍视频网 | 国产精品点击进入在线影院高清 | 国产精品999 | 超级97碰碰碰碰久久久久最新 | 亚洲国产资源 | 啪视频免费 | 久草在线视频资源站 | 亚洲在线播放 | 日韩在线观看中文字幕 | 精品久久久久久久 | 亚洲成年网站在线777 | 一级黄色免费毛片 | 欧美精品一区二区免费 | 亚洲午夜精品久久久久久app | 久草网址| 91久久国产综合久久 | 亚洲成人网在线 | 国产欧美一区二区成人影院 | 91精品一区 | 成人在线一区二区三区 | 国产日韩一区二区三区在线观看 | 日本在线播放一区 | 天天综合欧美 | 欧美黄网在线 | 亚洲第一成年免费网站 | 亚洲国产精品第一区二区三区 | 千涩成人网| 一区二区日韩 | 久久久久久免费一区二区三区 | 91精品天美精东蜜桃传媒免费 | 丁香婷婷久久 | 欧美成人伊人十综合色 | 男女性高爱潮免费网站 | 激情五月社区 | 日夜夜操 | 日本伊人色综合网站 | 北条麻妃国产九九九精品小说 | 久久久久久久久99精品 |