Android 暫停和恢復(fù)Activity
暫停和恢復(fù)Activity(Pausing and Resuming an Activity)
一個(gè)Activity是一個(gè)應(yīng)用程序組件,提供一個(gè)屏幕,用戶(hù)可以用來(lái)交互為了完成某項(xiàng)任務(wù),例如撥號(hào)、拍照、發(fā)送email、看地圖。每一個(gè)activity被給予一個(gè)窗口,在上面可以繪制用戶(hù)接口。窗口通常充滿(mǎn)屏幕,但也可以小于屏幕而浮于其它窗口之上。
一個(gè)應(yīng)用程序通常由多個(gè)activities組成,他們通常是松耦合關(guān)系。通常,一個(gè)應(yīng)用程序中的activity被指定為"main"activity,當(dāng)?shù)谝淮螁?dòng)應(yīng)用程序的時(shí)候呈現(xiàn)給用戶(hù)的那個(gè)activity。每一個(gè)activity然后可以啟動(dòng)另一個(gè)activity為了完成不同的動(dòng)作。每一次一個(gè)activity啟動(dòng),前一個(gè)activity就停止了,但是系統(tǒng)保留activity在一個(gè)棧上(“back stack”)。當(dāng)一個(gè)新activity啟動(dòng),它被推送到棧頂,取得用戶(hù)焦點(diǎn)。Back Stack符合簡(jiǎn)單“后進(jìn)先出”原則,所以,當(dāng)用戶(hù)完成當(dāng)前activity然后點(diǎn)擊back按鈕,它被彈出棧(并且被摧毀),然后之前的activity恢復(fù)。
當(dāng)一個(gè)activity因新的activity啟動(dòng)而停止,它被通知這種狀態(tài)轉(zhuǎn)變通過(guò)activity的生命周期回調(diào)函數(shù)。有許多回調(diào)函數(shù)一個(gè)activity可能會(huì)收到,源于它自己的狀態(tài)變化-無(wú)論系統(tǒng)創(chuàng)建它、停止它、恢復(fù)它、摧毀它-并且每個(gè)回調(diào)提供你完成適合這個(gè)狀態(tài)的指定工作的機(jī)會(huì)。例如,當(dāng)停止的時(shí)候,你的activity應(yīng)該釋放任何大的對(duì)象,例如網(wǎng)絡(luò)數(shù)據(jù)庫(kù)連接。當(dāng)activity恢復(fù),你可以重新獲得必要的資源和恢復(fù)被中斷的動(dòng)作。這些狀態(tài)轉(zhuǎn)換都是activity的生命周期的部分。
在正常的應(yīng)用程序使用,前臺(tái)activity有時(shí)會(huì)被其他可視化組件遮擋,從而 造成activity的暫停。例如,當(dāng)一個(gè)半透明的activity打開(kāi)時(shí)(如在一個(gè)風(fēng)格對(duì)話(huà)框),以前的activity就暫停了。只要 activity仍然是部分可見(jiàn),但目前沒(méi)有獲得焦點(diǎn),它就依然處于暫停狀態(tài)。
然而,一旦activity被完全遮擋住,并且對(duì)用戶(hù)不可見(jiàn)了,那么它就停止了 (這是下一課需要討論的內(nèi)容)。
當(dāng)你的activity進(jìn)入暫停狀態(tài),系統(tǒng)將對(duì)你的Activity調(diào)用 onPause()方法。在此方法中,你可以停止那些在暫停狀態(tài)時(shí)不應(yīng)該繼續(xù)進(jìn)行的行為(如視頻播放),或者持久化一些需要永久保存的信息,以使得用戶(hù)繼 續(xù)留在你的應(yīng)用程序。如果用戶(hù)返回到你的activity,系統(tǒng)將從暫停狀態(tài)中恢復(fù)它,并調(diào)用onResume()方法。
注意:當(dāng)你的activity接收到一個(gè)對(duì)onPause()的調(diào)用時(shí),它可能 是一個(gè)跡象,表明activity將暫停一會(huì)兒,然后用戶(hù)還會(huì)返回到你的activity。然而,它通常是第一個(gè)跡象,表明用戶(hù)正在離開(kāi)你的 activity。
圖 1。當(dāng)一個(gè)半透明的activity掩蓋了你的 activity,系統(tǒng)就會(huì)調(diào)用onPause(),activity等 在暫停狀態(tài)(1)。如果用戶(hù)返回到仍處于暫停狀態(tài)的 activity,系統(tǒng)就會(huì)調(diào)用onResume()(2)。
暫停你的Activity(Pause Your Activity)
當(dāng)系統(tǒng)為你的activity調(diào)用onPause()時(shí),從技術(shù)上講,你的 activity仍然是部分可見(jiàn)的,但最常見(jiàn)的是表明用戶(hù)正在離開(kāi)這個(gè)activity,并且它也將很快進(jìn)入停止(Stopped)狀態(tài)。你應(yīng)該
通常使用 onPause()回調(diào):
停止動(dòng)畫(huà)效果或者其他正在進(jìn)行地消耗CPU資源的行為。
提交尚未保存的更改,但前提是用戶(hù)希望這樣處理:當(dāng)他們離開(kāi)時(shí),需要將所做的變動(dòng)做一個(gè)永久地保存(如撰寫(xiě)電子郵件)。
釋放一些系統(tǒng)資源,例如廣播接收器,處理傳感器(如GPS),或任何會(huì)影響電池壽命的資源,而與此同時(shí)你的activity又被暫停了,用戶(hù)不再需要這些 資源。
舉個(gè)例子,如果你的應(yīng)用程序使用了照相機(jī),那么onPause()方法就是釋放它的好地方。
@Override public void onPause() { super.onPause(); // Always call the superclass method first // Release the Camera because we don't need it when paused // and other activities might need to use it. if (mCamera != null) { mCamera.release() mCamera = null; } }
一般來(lái)說(shuō),你不應(yīng)該使用onPause()去將用戶(hù)的變更(如個(gè)人信息輸入形 式)保存到持久化的存儲(chǔ)中。只有當(dāng)你確定用戶(hù)期望的是自動(dòng)保存其所做的變更(如起草一個(gè)電子郵件)時(shí),你才可以在onPause()方法中將用戶(hù)的這種變 更寫(xiě)到持久化存儲(chǔ)中。然而,你應(yīng)該避免在onPause()中執(zhí)行CPU高負(fù)荷工作,如讀寫(xiě)數(shù)據(jù)庫(kù),因?yàn)樗鼤?huì)減緩到下一個(gè)activity的過(guò)渡動(dòng)作(你 應(yīng)該在onStop()中執(zhí)行重負(fù)荷關(guān)閉動(dòng)作)。
你應(yīng)該保持業(yè)務(wù)量在onPause()方法相對(duì)簡(jiǎn)單,為了讓一個(gè)快速過(guò)渡到用戶(hù) 的下一個(gè)目的地,如果你的activity實(shí)際上是被停止。
注意:當(dāng)你的activity暫停時(shí),該Activity實(shí)例還駐留在內(nèi)存中, 并且在activity恢復(fù)時(shí)再被重新調(diào)用。你在調(diào)用任何回調(diào)方法轉(zhuǎn)變到恢復(fù)狀態(tài)時(shí),不需要重新初始化那些已經(jīng)創(chuàng)建了的組件。
恢復(fù)你的Activity(Resume Your Activity)
當(dāng)用戶(hù)從暫停狀態(tài)中恢復(fù)你的activity時(shí),系統(tǒng)就會(huì)調(diào)用 onResume()方法。
要注意的是,每次你的activity進(jìn)入前景時(shí),系統(tǒng)都會(huì)調(diào)用這個(gè)方法,包括 當(dāng)它第一次被創(chuàng)建的時(shí)候。因此,你應(yīng)該在實(shí)現(xiàn)onResume()時(shí),初始化那些你在onPause()會(huì)釋放的組件,并且執(zhí)行那些每次activity 進(jìn)入恢復(fù)狀態(tài)時(shí)都必須完成的初始化動(dòng)作(如開(kāi)始動(dòng)畫(huà)和初始化activity獲得用戶(hù)焦點(diǎn)時(shí)需要使用的組件)。
下面的例子onResume()是對(duì)應(yīng)的onPause()上面的例子,所以它 初始化activity暫停時(shí)被釋放的相機(jī)。
@Override public void onResume() { super.onResume(); // Always call the superclass method first // Get the Camera instance as the activity achieves full user focus if (mCamera == null) { initializeCamera(); // Local method to handle camera init } }
以上內(nèi)容是小編給大家介紹的Android Activity暫停和恢復(fù)的相關(guān)知識(shí),希望對(duì)大家有所幫助!
- Android線(xiàn)程管理之ActivityThread
- Android Activity 橫豎屏切換的生命周期
- 詳解Android Activity之間切換傳遞數(shù)據(jù)的方法
- Android動(dòng)態(tài)加載Activity原理詳解
- Android Activity回收與操作超時(shí)處理
- Android實(shí)現(xiàn)Activity、Service與Broadcaster三大組件之間互相調(diào)用的方法詳解
- 詳解Android開(kāi)發(fā)中Activity的四種launchMode
- Android開(kāi)發(fā)之TabActivity用法實(shí)例詳解
- 全面解析Android應(yīng)用開(kāi)發(fā)中Activity類(lèi)的用法
- Android中子線(xiàn)程和UI線(xiàn)程通信詳解
- android中UI主線(xiàn)程與子線(xiàn)程深入分析
- android開(kāi)發(fā)教程之子線(xiàn)程中更新界面
- android使用handler ui線(xiàn)程和子線(xiàn)程通訊更新ui示例
- Android實(shí)現(xiàn)在子線(xiàn)程中更新Activity中UI的方法
相關(guān)文章
Android實(shí)現(xiàn)圖片點(diǎn)擊放大
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)圖片點(diǎn)擊放大,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-10-10Kotlin 實(shí)現(xiàn)按鈕點(diǎn)擊跳轉(zhuǎn)監(jiān)聽(tīng)事件方式
這篇文章主要介紹了Kotlin 實(shí)現(xiàn)按鈕點(diǎn)擊跳轉(zhuǎn)監(jiān)聽(tīng)事件方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-03-03Flutter?Widget?之FocusableActionDetector使用詳解
這篇文章主要為大家介紹了Flutter?Widget?之FocusableActionDetector使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11Android程序開(kāi)發(fā)ListView+Json+異步網(wǎng)絡(luò)圖片加載+滾動(dòng)翻頁(yè)的例子(圖片能緩存,圖片不錯(cuò)亂)
這篇文章主要介紹了Android程序開(kāi)發(fā)ListView+Json+異步網(wǎng)絡(luò)圖片加載+滾動(dòng)翻頁(yè)的例子(圖片能緩存,圖片不錯(cuò)亂) 的相關(guān)資料,需要的朋友可以參考下2016-01-01Android中監(jiān)聽(tīng)軟鍵盤(pán)輸入的使用方式
今天我們來(lái)討論一下Android中監(jiān)聽(tīng)軟鍵盤(pán)輸入的使用方式,它允許用戶(hù)輸入文本和執(zhí)行其他操作,但是,有時(shí)候我們需要在用戶(hù)輸入文本時(shí)進(jìn)行一些特殊的處理,比如實(shí)時(shí)驗(yàn)證輸入內(nèi)容、限制輸入字符的類(lèi)型等,因此,了解如何監(jiān)聽(tīng)軟鍵盤(pán)輸入是非常重要的2023-10-10Android入門(mén)之系統(tǒng)設(shè)置Configuration類(lèi)的使用教程
這篇文章主要給大家介紹一下Configuration類(lèi)的使用,Configuration類(lèi)是用來(lái)描述手機(jī)設(shè)備的配置信息的,比如屏幕方向,?觸摸屏的觸摸方式等,感興趣的可以了解一下2022-12-12Android徹底清除APP數(shù)據(jù)的兩種方案總結(jié)
大家在用Android手機(jī)的時(shí)候肯定都遇到過(guò)內(nèi)存剩余空間越來(lái)越小的情況,所以下面這篇文章主要給大家介紹了關(guān)于Android徹底清除APP數(shù)據(jù)的兩種方案,需要的朋友可以參考下2021-11-11Android編程實(shí)現(xiàn)滑動(dòng)按鈕功能詳解
這篇文章主要介紹了Android編程實(shí)現(xiàn)滑動(dòng)按鈕功能,結(jié)合實(shí)例形式較為詳細(xì)的分析了Android實(shí)現(xiàn)滑動(dòng)按鈕的功能、布局及相關(guān)注意事項(xiàng),需要的朋友可以參考下2017-02-02Android基于service實(shí)現(xiàn)音樂(lè)的后臺(tái)播放功能示例
這篇文章主要介紹了Android基于service實(shí)現(xiàn)音樂(lè)的后臺(tái)播放功能,結(jié)合實(shí)例形式分析了Android基于Service組件實(shí)現(xiàn)多媒體音頻播放功能的步驟與相關(guān)操作技巧,需要的朋友可以參考下2016-10-10