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

歡迎訪問 生活随笔!

生活随笔

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

Android

Android官方开发文档Training系列课程中文版:管理Activity的生命周期之停止和重启Activity

發(fā)布時(shí)間:2024/7/5 Android 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android官方开发文档Training系列课程中文版:管理Activity的生命周期之停止和重启Activity 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

原文地址 : http://android.xsoftlab.net/training/basics/activity-lifecycle/stopping.html#Start

在activity的生命周期內(nèi),適當(dāng)?shù)耐V购椭匦聠?dòng)activity是一個(gè)非常重要的過程,它可以確保用戶能感覺到APP一直是存活狀態(tài),并且不會(huì)丟失他們的進(jìn)度。這里有幾項(xiàng)關(guān)鍵的場景適用于activity停止與重啟:

  • 用戶打開了最新使用APP的窗口然后從你的APP切換到了別的APP上。現(xiàn)在APP內(nèi)的activity當(dāng)前位于后臺,并且處于停止?fàn)顟B(tài)。如果用戶從設(shè)備屏幕的主界面通過點(diǎn)擊圖標(biāo)或者從最近使用APP的窗口返回了了App,那么原來的那個(gè)activity則會(huì)重新啟動(dòng)。
  • 用戶在APP內(nèi)執(zhí)行了一個(gè)啟動(dòng)新activity的動(dòng)作。那么當(dāng)前的這個(gè)activity會(huì)在第二個(gè)activity創(chuàng)建的時(shí)候停止。如果用戶按下了返回按鈕,則第一個(gè)activity會(huì)被重啟。
  • 用戶在使用APP的時(shí)候接到了一個(gè)電話。

Activity類提供了兩個(gè)生命周期函數(shù),onStop和onRestart,它們可以使activity單獨(dú)的處理停止?fàn)顟B(tài)和重啟狀態(tài)。和局部UI被遮擋的暫停狀態(tài)不同,停止?fàn)顟B(tài)保證UI一定是不可見的,并且用戶的焦點(diǎn)轉(zhuǎn)移到了另一個(gè)Activity上。

Note:因?yàn)橄到y(tǒng)會(huì)在activity停止的時(shí)候駐留在內(nèi)存中,所以你可能不需要實(shí)現(xiàn)onStop方法和onResume方法,甚至是onStart方法。為了大多數(shù)活動(dòng)相對簡單,activity只需要停止和重啟就好了,你可能只需要使用onPause方法來暫停一些正在進(jìn)行中的活動(dòng)并且釋放系統(tǒng)資源。


上圖:當(dāng)用戶離開了activity,系統(tǒng)會(huì)調(diào)用onStop方法停止activity(1)。如果用戶從activity的停止?fàn)顟B(tài)返回了,系統(tǒng)會(huì)調(diào)用onRestart方法(2),然后會(huì)很快的接著調(diào)用onStart方法(3)和onResume方法(4)。注意不用關(guān)心activity在停止的時(shí)候的狀況,因?yàn)橄到y(tǒng)總是會(huì)在onStop之前調(diào)用onResume。

停止Activity

當(dāng)activity的onStop方法被調(diào)用了,這時(shí),activity不再可見,并且需要釋放用戶不需要使用的所有資源。activity一旦停止,如果系統(tǒng)需要恢復(fù)系統(tǒng)內(nèi)存的話,系統(tǒng)會(huì)銷毀這個(gè)activity。在極端情況下,系統(tǒng)會(huì)將整個(gè)APP殺死,并且不會(huì)調(diào)用activity的onDestory方法,所以應(yīng)該使用onStop方法釋放資源,因?yàn)檫@些資源可能會(huì)引起內(nèi)存泄露,這是很嚴(yán)重的。

盡管onPause方法在onStop之前被調(diào)用了,你應(yīng)該使用onStop執(zhí)行更大、更多的CPU高負(fù)荷操作,比如將信息寫入數(shù)據(jù)庫。

這個(gè)例子實(shí)現(xiàn)了onStop方法,方法內(nèi)對草稿內(nèi)容進(jìn)行了持久化存儲(chǔ):

@Override protected void onStop() {super.onStop(); // Always call the superclass method first// Save the note's current draft, because the activity is stopping// and we want to be sure the current note progress isn't lost.ContentValues values = new ContentValues();values.put(NotePad.Notes.COLUMN_NAME_NOTE, getCurrentNoteText());values.put(NotePad.Notes.COLUMN_NAME_TITLE, getCurrentNoteTitle());getContentResolver().update(mUri, // The URI for the note to update.values, // The map of column names and new values to apply to them.null, // No SELECT criteria are used.null // No WHERE columns are used.); }

當(dāng)activity處于停止?fàn)顟B(tài)時(shí),Activity對象會(huì)駐留在系統(tǒng)中,然后當(dāng)activity恢復(fù)的時(shí)候會(huì)被重新調(diào)用。你不需要重新實(shí)例化那些在其它回調(diào)方法內(nèi)創(chuàng)建的對象。系統(tǒng)會(huì)保持布局中的每一個(gè)View的狀態(tài),所以如果用戶在EditText中輸入了文字,那么這些內(nèi)容會(huì)保持在內(nèi)存中,所以不需要專門去保存和恢復(fù)它。

Note:甚至是activity在停止的狀態(tài)被系統(tǒng)銷毀了,仍然可以在一個(gè)Bundle中保存View對象的狀態(tài)(比如EditText中的文本),并且可以在用戶返回了這類Activity的實(shí)例(原來的對象已被銷毀,這個(gè)對象是又重新創(chuàng)建的)時(shí)恢復(fù)它們(下節(jié)課會(huì)討論有關(guān)在Activity銷毀和重新創(chuàng)建的時(shí)候使用Bundle存儲(chǔ)或讀取其它狀態(tài)的數(shù)據(jù))。

啟動(dòng)/重新啟動(dòng)Activity

當(dāng)Activity從停止?fàn)顟B(tài)返回了前臺,系統(tǒng)會(huì)調(diào)用onRestart方法和onStart方法,這樣的調(diào)用會(huì)每次出現(xiàn)在activity可見的時(shí)候。然而onRestart方法只是被在activity從停止?fàn)顟B(tài)恢復(fù)的時(shí)候被調(diào)用,所以可以使用這個(gè)方法執(zhí)行一些特別的必須的恢復(fù)工作,只限于activity先前處于停止?fàn)顟B(tài)而不是銷毀狀態(tài)。

APP使用onRestart方法恢復(fù)activity的狀態(tài)并不通用,所以這里沒有該方法的可以適用于一般受歡迎的APP的使用樣例。然而,因?yàn)閛nStop方法本來應(yīng)該清理所有的activity資源,所以在activity重啟的時(shí)候需要重新實(shí)例化它們。還有,你也應(yīng)該在activity第一次創(chuàng)建的時(shí)候?qū)嵗鼈?當(dāng)這個(gè)activity的實(shí)例不存在的時(shí)候)。對于這個(gè)原因,你應(yīng)該使用與onStop方法相對應(yīng)的onStart方法,因?yàn)橄到y(tǒng)會(huì)在創(chuàng)建activity時(shí)候和在停止?fàn)顟B(tài)下重啟activity的時(shí)候都會(huì)調(diào)用onStart方法。

舉個(gè)例子,因?yàn)橛脩艨赡苡卸喾N方式將長時(shí)間不可見的activity重新帶回來,所以onStart方法是一個(gè)驗(yàn)證系統(tǒng)特性是否可用的好地方:

@Override protected void onStart() {super.onStart(); // Always call the superclass method first// The activity is either being restarted or started for the first time// so this is where we should make sure that GPS is enabledLocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);boolean gpsEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);if (!gpsEnabled) {// Create a dialog here that requests the user to enable GPS, and use an intent// with the android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS action// to take the user to the Settings screen to enable GPS when they click "OK"} } @Override protected void onRestart() {super.onRestart(); // Always call the superclass method first// Activity being restarted from stopped state }

當(dāng)系統(tǒng)需要銷毀Activity時(shí),它會(huì)調(diào)用activity的onDestory方法。因?yàn)樵谕ǔG闆r下,你會(huì)在onStop方法中釋放大部分資源,那么在onDestory方法內(nèi)不需要再做什么工作。這個(gè)方法是清理可能會(huì)導(dǎo)致內(nèi)存泄露的資源的最后機(jī)會(huì),所以你應(yīng)該確保其它附屬線程以及其它類似方法跟蹤的長時(shí)間運(yùn)行的工作也被銷毀。

總結(jié)

以上是生活随笔為你收集整理的Android官方开发文档Training系列课程中文版:管理Activity的生命周期之停止和重启Activity的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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