新聞中心
小編給大家分享一下Activity中isFinishing()如何判斷Activity的狀態(tài),相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
紅山網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),紅山網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為紅山上千余家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站制作要多少錢(qián),請(qǐng)找那個(gè)售后服務(wù)好的紅山做網(wǎng)站的公司定做!
在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)”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
新聞標(biāo)題:Activity中isFinishing()如何判斷Activity的狀態(tài)
標(biāo)題來(lái)源:http://fisionsoft.com.cn/article/jcepoj.html