java.lang.IllegalStateException: Activity has been destroyed原因查找:

? ?最近在做一個(gè)項(xiàng)目需要在一個(gè)界面中嵌套多個(gè)Fragment,但是在Fragment之間切換的時(shí)候出現(xiàn)了一個(gè)bug很棘手。話不多說直接貼上bug詳情如下:

? ?我們可以知道這個(gè)bug是Fragment之前切換的時(shí)候調(diào)用commitAllowingStateLoss()產(chǎn)生的,我們來看看commitAllowingStateLoss()的源碼

繼續(xù)往下看commitInternal(true)源碼

我們發(fā)現(xiàn)最終會(huì)走到enqueueAction()這個(gè)方法,我們繼續(xù)看源碼:

? ? ?哈哈,這個(gè)時(shí)候有沒有發(fā)現(xiàn)眼前一亮啊,終于找到bug問題的所在了吧!但是有一個(gè)問題是不是沒弄明白呢?為那就是為啥mDestroyed為true或者mHost==null,別急我們繼續(xù)往下查找,我們首先要看一下給mDestroyed賦值和mHost置空的地方,結(jié)果皇天不負(fù)有心人??!我們發(fā)現(xiàn)在FragmentManager里面有一個(gè)方法dispatchDestroy()里面有隊(duì)mDestroyed和mhost做了處理。

? ? 接下來我們就要查看為什么回調(diào)用dispatchDestroy()這個(gè)方法。我們都知道一個(gè)Activity銷毀掉會(huì)走onDestroy()這個(gè)方法,如下:

? ? ?看到這里是不是就很清晰了原來是調(diào)用commitAllowingStateLoss()的時(shí)候activity已經(jīng)銷毀掉了,至于activity為啥會(huì)銷毀那就要看一下原因了,如果沒找到原因那么可以在執(zhí)行commitAllowingStateLoss()時(shí)做一個(gè)activity非空的判斷。至此一個(gè)復(fù)雜的bug被處理掉了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Enemy action: Trump and the media ① About 200 American ne...
    新心斷點(diǎn)閱讀 118評(píng)論 0 0
  • 美國(guó)媒體大戰(zhàn)川普:誰(shuí)才是人民公敵 美國(guó)總統(tǒng)特朗普入主白宮后,對(duì)美國(guó)媒體的公開嘲諷幾乎成了家常便飯,他曾多次批評(píng)主流...
    新心斷點(diǎn)閱讀 184評(píng)論 0 0
  • 今天在食堂和室友吃飯,正兒八經(jīng)吃了午餐,是那種有飯有菜,還不急慢慢的吃的午餐,還喝了魚頭豆腐湯。 突然我們都覺得,...
    冰花兒啊閱讀 2,048評(píng)論 11 11
  • 今天重讀了《復(fù)制貓營(yíng)銷101-如何更有效地讓你的財(cái)富實(shí)現(xiàn)倍數(shù)增長(zhǎng)》,書中主要向人們展示了一個(gè)新的偉大的復(fù)制財(cái)富的系...
    寧博Villa閱讀 251評(píng)論 0 1
  • 圖文/巴山雨 轉(zhuǎn)載請(qǐng)聯(lián)系作者授權(quán) 喜歡就來關(guān)注雨姐姐的專題我真的來畫畫,一起禪繞吧。 每天手繪一張圓形禪繞畫,到第...
    巴山雨閱讀 1,683評(píng)論 1 4

友情鏈接更多精彩內(nèi)容