溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Activity中isFinishing()如何判斷Activity的狀態

發布時間:2021-07-19 11:10:28 來源:億速云 閱讀:215 作者:小新 欄目:移動開發

小編給大家分享一下Activity中isFinishing()如何判斷Activity的狀態,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

在Activity中調用finish()或按返回鍵退出時,若有資源被其他對象引用不能釋放(如context被某個單例對象引用或正在線程中被使用),則activity不會被調用onDestory()方法。

isFinishing() 可用來判斷Activity是否處于活躍狀態(false)還是等待回收狀態(true)。

isDestroyed() 根據源碼注釋可知,只有onDestroy()方法被調用后它才返回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() 調用研究

剛剛一個BUG讓我發現,如果 activity 實現了一個回調接口,然后使用 this 設置給需要回調接口的方法,這種應用場景比較常見,最常見的就是實現 onClickListener 接口,然后 findViewById().setOnClickListenr(this)

如果,這個回調接口設置到了一個靜態對象(單例模式),當 activity finish() 的時候(按返回鍵,回到桌面),則activity 不會被調用 onDestroy() ,原因可能是 activity 對象還在被引用!

此時你再點擊圖標回到應用,onCreate() 再次調用!

很明顯,如果你把資源釋放放在了 onDestroy() 里面,就會導致內存泄露!

那有沒有解決辦法呢?

有的 你可以在 onPause() 方法里面判斷 isFinishing() ,正常調用 finish() 后 activity 的回調過程是 onPause、onStop、onDestroy ,倘若出現上面的情況,只到 onPause!但是 isFinishing() 標志還是為 true !你可以釋放資源了。

以上是“Activity中isFinishing()如何判斷Activity的狀態”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女