日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > Android >内容正文

Android

android activity 回调函数,Android Activity的生命周期

發(fā)布時(shí)間:2024/8/5 Android 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android activity 回调函数,Android Activity的生命周期 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Activity的生命周期

Android系統(tǒng)根據(jù)activity的所處不同階段對(duì)應(yīng)的喚起其特定的回調(diào)函數(shù)來執(zhí)行代碼。activity的一系列有序的生命周期回調(diào)函數(shù)。本文將來討論下activity各階段生命周期的回調(diào)函數(shù),以及其調(diào)用場(chǎng)景。

basic-lifecycle.png

Created: 在activity 調(diào)用onCreate()方法后,activity處于已經(jīng)創(chuàng)建完成的狀態(tài)。

Started: activity處于部分可見且未獲得焦點(diǎn)的狀態(tài)

Resumed: activity處于獲得焦點(diǎn)的狀態(tài),activity處于最前端的, 用戶可以與它進(jìn)行交互。

Paused: activity處于部分可見但失去焦點(diǎn)的狀態(tài),activity被另一activity(半透明的,所以部分可見)所遮蓋。

Stoped: activity處于不可見的狀態(tài)

注: Created與Started都是短暫存在的,系統(tǒng)快速的執(zhí)行onCreate()和onStart()并執(zhí)行下一階段的回調(diào)函數(shù)移動(dòng)到下一個(gè)狀態(tài)。系統(tǒng)調(diào)用onCreate(),之后會(huì)迅速調(diào)用onStart(), 之后再迅速執(zhí)行onResume()。

Activity的生命周期回調(diào)函數(shù)

正常的生命周期回調(diào)

在了解了activity的生命周期簡(jiǎn)要說明后,對(duì)于我們程序員來說,更重要的是在編碼過程中更好的配合activity在各個(gè)階段做恰當(dāng)?shù)氖虑椤?/p>

onCreate: 用來執(zhí)行程序啟動(dòng)所需要的基本邏輯。為了創(chuàng)建一個(gè)activity所需要的一些基礎(chǔ)操作。 如,聲明UI(setContentView),定義成員變量(findViewById),配置UI(setText)等。

onRestart: 當(dāng)activity從不可見,重新變?yōu)榭梢姇r(shí)調(diào)用,比如用戶突然點(diǎn)Home鍵回到主頁(yè)面,或者一個(gè)來電被接通并掛斷等。

onStart:

onResume: onStart() 與 onResume()執(zhí)行時(shí)迅速的,在用戶從Paused 或者 Stopped狀態(tài)中恢復(fù)的時(shí)候操作,比如用戶離開且回來后,重新請(qǐng)求一次服務(wù)器數(shù)據(jù)。

onPause: 該回調(diào)意味著用戶有可能離開這個(gè)activity(且不回來),所以需要停止目前正在運(yùn)行任務(wù)的操作, 比如暫停動(dòng)畫播放或者是保存那些有可能需要自動(dòng)保存的信息(比如緩存筆記草稿,雖然用戶沒點(diǎn)保存,但他期望任何時(shí)候離開都能保存草稿)。 如果用戶從暫停狀態(tài)回到你的activity, 系統(tǒng)應(yīng)該恢復(fù)那些數(shù)據(jù)并執(zhí)行onResume()方法。

onStart: activity即將停止,需要保存長(zhǎng)久數(shù)據(jù)(比如筆記草稿同步到服務(wù)器),做一些資源回收操作。

onDestory: 正常情況下的activity局部變量引用會(huì)隨著activity的銷毀而銷毀(特殊的,存在Context內(nèi)存泄漏),垃圾回收。 你的activity應(yīng)該在onPause()與onStop()中執(zhí)行清除activity資源的操作。但,如果你的activity包含了你在onCreate時(shí)創(chuàng)建的后臺(tái)線程,或者其他有可能導(dǎo)致內(nèi)存泄漏的資源, 你應(yīng)該在OnDestroy()關(guān)閉他們。

注:正常的情況下activity A跳轉(zhuǎn)到B 執(zhí)行的生命周期回調(diào)是

A.onPause > B.onCreate > B.onStart > B.onResume > A.onStop

所以如果在A.onPause 或者 B的啟動(dòng)回調(diào)中做了耗時(shí)操作,就會(huì)導(dǎo)致activity啟動(dòng)的時(shí)候白屏或者透明(依主題而定),可以通過異步處理耗時(shí)操作解決,或者治標(biāo)不治本的在Manifest引用Theme設(shè)置android:windowBackground(特別對(duì)于啟動(dòng)頁(yè))。

被Destroy的生命周期回調(diào)

默認(rèn)情況下, 系統(tǒng)會(huì)使用Bundle實(shí)例來保存每一個(gè)視圖對(duì)象中的信息(例如輸入EditText 中的文本內(nèi)容)。(activity通過調(diào)用其成員變量mDecor去逐層保存其子View(包括setContentView設(shè)置的布局)的狀態(tài),比如;保存EditText 組件中的文本,mDecor是activity根View)

因此,如果你的Activity被destroyed與recreated,那么layout的狀態(tài)信息會(huì)自動(dòng)恢復(fù)到之前的狀態(tài)。然而,你的activity也許存在更多你想要恢復(fù)的狀態(tài)信息,例如記錄成員變量值。

所以為了能使Android系統(tǒng)能夠恢復(fù)Activity中的View的狀態(tài), 每個(gè)View都必須有一個(gè)全局唯一的ID。

為了讓你可以保存額外的數(shù)據(jù)到Bundle實(shí)例。Activity提供了onSaveInstanceState()和onRestoreInstanceState(),當(dāng)你的Activity被系統(tǒng)殺死時(shí)。當(dāng)系統(tǒng)調(diào)用這個(gè)函數(shù)時(shí),系統(tǒng)會(huì)在你的Activity被異常Destory時(shí)傳遞一個(gè)Bundle 對(duì)象(也就是super.onCreate ( savedInstanceState);中攜帶的參數(shù)savedInstanceState )。然后如果系統(tǒng)在Activity被Destory之后想重新創(chuàng)建這個(gè)Activity實(shí)例時(shí),之前的那個(gè)Bundle對(duì)象會(huì)被傳遞到你的activity的onRestoreInstanceState()方法與 onCreate() 方法中。

注: @override的onSaveInstanceState只會(huì)在activity被系統(tǒng)因?yàn)閮?nèi)存不足殺死的等情況下才會(huì)回調(diào),而程序主動(dòng)調(diào)用finish和用戶點(diǎn)擊back鍵盤是不會(huì)回調(diào)的。

onSaveInstanceState(): 在onStop() 方法之后執(zhí)行,這個(gè)方法會(huì)默認(rèn)保存Activity視圖的狀態(tài)信息, 例如在 EditText 組件中的文本或者是 ListView 的滑動(dòng)位置。為了給Activity保存額外的狀態(tài)信息, 你必須實(shí)現(xiàn)onSaveInstanceState() 并增加key-value pairs到 Bundle 對(duì)象中。

@Override

public void onSaveInstanceState(Bundle savedInstanceState) {

// 保存用戶游戲狀態(tài)

savedInstanceState.putInt(SCORE, mCurrentScore);

savedInstanceState.putInt(LEVEL, mCurrentLevel);

// 默認(rèn)實(shí)現(xiàn)會(huì)保存view樹的狀態(tài)信息

super.onSaveInstanceState(savedInstanceState);

}

onRestoreInstanceState(): 在 **onStart() 方法之后執(zhí)行. **系統(tǒng)僅僅會(huì)在存在需要恢復(fù)的狀態(tài)信息時(shí)才會(huì)調(diào)用 onRestoreInstanceState() , 因此你不需要檢查 Bundle 是否為null。它必不為null。但如果你用到onCreate方法里的savedInstanceState 就需要判斷了。

public void onRestoreInstanceState(Bundle savedInstanceState) {

super.onRestoreInstanceState(savedInstanceState);

// 恢復(fù)成員變量的狀態(tài)信息

mCurrentScore = savedInstanceState.getInt(SCORE);

mCurrentLevel = savedInstanceState.getInt(LEVEL);

}

總結(jié)

以上是生活随笔為你收集整理的android activity 回调函数,Android Activity的生命周期的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。