Activity isFinishing()判斷Activity的狀態(tài)實(shí)例
在Activity中調(diào)用finish()或按返回鍵退出時(shí),若有資源被其他對(duì)象引用不能釋放(如context被某個(gè)單例對(duì)象引用或正在線程中被使用),則activity不會(huì)被調(diào)用onDestory()方法。
isFinishing() 可用來(lái)判斷Activity是否處于活躍狀態(tài)(false)還是等待回收狀態(tài)(true)。
isDestroyed() 根據(jù)源碼注釋可知,只有onDestroy()方法被調(diào)用后它才返回true,因此實(shí)際用處不大。
查看源代碼中的注釋:
/**
* Check to see whether this activity is in the process of finishing,
* either because you called {@link #finish} on it or someone else
* has requested that it finished. This is often used in
* {@link #onPause} to determine whether the activity is simply pausing or
* completely finishing.
*
* @return If the activity is finishing, returns true; else returns false.
*
* @see #finish
*/
public boolean isFinishing() {
return mFinished;
}
/**
* Returns true if the final {@link #onDestroy()} call has been made
* on the Activity, so this instance is now dead.
*/
public boolean isDestroyed() {
return mDestroyed;
}
Activity onDestroy() 調(diào)用研究
剛剛一個(gè)BUG讓我發(fā)現(xiàn),如果 activity 實(shí)現(xiàn)了一個(gè)回調(diào)接口,然后使用 this 設(shè)置給需要回調(diào)接口的方法,這種應(yīng)用場(chǎng)景比較常見(jiàn),最常見(jiàn)的就是實(shí)現(xiàn) onClickListener 接口,然后 findViewById().setOnClickListenr(this)
如果,這個(gè)回調(diào)接口設(shè)置到了一個(gè)靜態(tài)對(duì)象(單例模式),當(dāng) activity finish() 的時(shí)候(按返回鍵,回到桌面),則activity 不會(huì)被調(diào)用 onDestroy() ,原因可能是 activity 對(duì)象還在被引用!
此時(shí)你再點(diǎn)擊圖標(biāo)回到應(yīng)用,onCreate() 再次調(diào)用!
很明顯,如果你把資源釋放放在了 onDestroy() 里面,就會(huì)導(dǎo)致內(nèi)存泄露!
那有沒(méi)有解決辦法呢?
有的 你可以在 onPause() 方法里面判斷 isFinishing() ,正常調(diào)用 finish() 后 activity 的回調(diào)過(guò)程是 onPause、onStop、onDestroy ,倘若出現(xiàn)上面的情況,只到 onPause!但是 isFinishing() 標(biāo)志還是為 true !你可以釋放資源了。
以上這篇Activity isFinishing()判斷Activity的狀態(tài)實(shí)例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Android 個(gè)人理財(cái)工具二:使用SQLite實(shí)現(xiàn)啟動(dòng)時(shí)初始化數(shù)據(jù)
本文主要介紹 Android 使用SQLite實(shí)現(xiàn)啟動(dòng)時(shí)初始化數(shù)據(jù),這里對(duì)SQLite 的數(shù)據(jù)庫(kù)進(jìn)行詳解,附有示例代碼,有興趣的小伙伴可以參考下2016-08-08
Android聊天工具基于socket實(shí)現(xiàn)
這篇文章主要介紹了基于socket實(shí)現(xiàn)的一個(gè)簡(jiǎn)單的Android聊天工具,實(shí)現(xiàn)方法簡(jiǎn)單,具有一定的參考價(jià)值,感興趣的朋友可以參考一下2016-02-02
Android開(kāi)發(fā)Activity的生命周期詳解
這篇文章主要介紹了Android開(kāi)發(fā)Activity的生命周期詳解,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參一下2022-07-07
Android開(kāi)發(fā)EditText實(shí)現(xiàn)密碼顯示隱藏
這篇文章主要為大家詳細(xì)介紹了Android開(kāi)發(fā)EditText實(shí)現(xiàn)密碼顯示隱藏,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08
制作獨(dú)立的Android模擬器實(shí)現(xiàn)方法
本文主要介紹如何制作獨(dú)立的Android模擬器,這里給大家提供詳細(xì)的制作流程,有需要的小伙伴可以參考下2016-08-08
Android中的popupwindow進(jìn)入和退出的動(dòng)畫(huà)效果
這篇文章主要介紹了Android中的popupwindow進(jìn)入和退出的動(dòng)畫(huà),需要的朋友可以參考下2017-04-04
Android Flutter利用貝塞爾曲線畫(huà)一個(gè)小海豚
貝塞爾曲線的應(yīng)用填補(bǔ)了計(jì)算機(jī)繪制與手繪之前的差距,更能表達(dá)人想畫(huà)出的曲線。本文就將利用貝塞爾曲線繪制一個(gè)可愛(ài)的小海豚,需要的可以參考一下2022-04-04
android為L(zhǎng)istView每個(gè)Item上面的按鈕添加事件
本篇文章主要介紹了android為L(zhǎng)istView每個(gè)Item上面的按鈕添加事件,有興趣的同學(xué)可以了解一下。2016-11-11
Android 中實(shí)現(xiàn)ListView滑動(dòng)隱藏標(biāo)題欄的代碼
本文通過(guò)實(shí)例代碼給大家分享了android listview滑動(dòng)隱藏標(biāo)題欄的方法,代碼簡(jiǎn)單易懂,需要的朋友參考下2017-01-01
Android編程判斷SD卡是否存在及使用容量查詢實(shí)現(xiàn)方法
這篇文章主要介紹了Android編程判斷SD卡是否存在及使用容量查詢實(shí)現(xiàn)方法,實(shí)例分析了Android針對(duì)SD卡是否存在及使用容量、全部容量等的判斷技巧,非常簡(jiǎn)單實(shí)用,需要的朋友可以參考下2015-10-10

