Activity isFinishing()判斷Activity的狀態(tài)實例
在Activity中調(diào)用finish()或按返回鍵退出時,若有資源被其他對象引用不能釋放(如context被某個單例對象引用或正在線程中被使用),則activity不會被調(diào)用onDestory()方法。
isFinishing() 可用來判斷Activity是否處于活躍狀態(tài)(false)還是等待回收狀態(tài)(true)。
isDestroyed() 根據(jù)源碼注釋可知,只有onDestroy()方法被調(diào)用后它才返回true,因此實際用處不大。
查看源代碼中的注釋:
/** * 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)用研究
剛剛一個BUG讓我發(fā)現(xiàn),如果 activity 實現(xiàn)了一個回調(diào)接口,然后使用 this 設(shè)置給需要回調(diào)接口的方法,這種應(yīng)用場景比較常見,最常見的就是實現(xiàn) onClickListener 接口,然后 findViewById().setOnClickListenr(this)
如果,這個回調(diào)接口設(shè)置到了一個靜態(tài)對象(單例模式),當 activity finish() 的時候(按返回鍵,回到桌面),則activity 不會被調(diào)用 onDestroy() ,原因可能是 activity 對象還在被引用!
此時你再點擊圖標回到應(yīng)用,onCreate() 再次調(diào)用!
很明顯,如果你把資源釋放放在了 onDestroy() 里面,就會導(dǎo)致內(nèi)存泄露!
那有沒有解決辦法呢?
有的 你可以在 onPause() 方法里面判斷 isFinishing() ,正常調(diào)用 finish() 后 activity 的回調(diào)過程是 onPause、onStop、onDestroy ,倘若出現(xiàn)上面的情況,只到 onPause!但是 isFinishing() 標志還是為 true !你可以釋放資源了。
以上這篇Activity isFinishing()判斷Activity的狀態(tài)實例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Android 個人理財工具二:使用SQLite實現(xiàn)啟動時初始化數(shù)據(jù)
本文主要介紹 Android 使用SQLite實現(xiàn)啟動時初始化數(shù)據(jù),這里對SQLite 的數(shù)據(jù)庫進行詳解,附有示例代碼,有興趣的小伙伴可以參考下2016-08-08Android開發(fā)EditText實現(xiàn)密碼顯示隱藏
這篇文章主要為大家詳細介紹了Android開發(fā)EditText實現(xiàn)密碼顯示隱藏,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-08-08Android中的popupwindow進入和退出的動畫效果
這篇文章主要介紹了Android中的popupwindow進入和退出的動畫,需要的朋友可以參考下2017-04-04android為ListView每個Item上面的按鈕添加事件
本篇文章主要介紹了android為ListView每個Item上面的按鈕添加事件,有興趣的同學(xué)可以了解一下。2016-11-11Android 中實現(xiàn)ListView滑動隱藏標題欄的代碼
本文通過實例代碼給大家分享了android listview滑動隱藏標題欄的方法,代碼簡單易懂,需要的朋友參考下2017-01-01Android編程判斷SD卡是否存在及使用容量查詢實現(xiàn)方法
這篇文章主要介紹了Android編程判斷SD卡是否存在及使用容量查詢實現(xiàn)方法,實例分析了Android針對SD卡是否存在及使用容量、全部容量等的判斷技巧,非常簡單實用,需要的朋友可以參考下2015-10-10