我有一個大問題,幾天來一直困擾着我的應用。安卓應用中的片段生命週期問題
我在我的應用程序中使用默認的sidemenu佈局,並根據選擇哪個sidemenu項目用不同的片段替換內容視圖。
我只需撥打
getSupportFragmentManager().beginTransaction().replace().commit();
與內容視圖ID和新實例化的片段。
問題的發生是因爲網絡電話的使用靜態網絡管理器類,這些片段中燃煤,應用程序使用解析爲它的後端和運行在沒有任何用戶交互的後臺網絡請求。
我已經成功地通過關閉設備的wifi和3G將其從互聯網上切斷來複制問題,會發生什麼情況是,如果我在當前網絡請求正在進行時加載另一個片段,它看起來像舊的片段不會被銷燬,所以當網絡請求返回並更新了一些UI視圖時,視圖爲空,因爲我只能假設視圖綁定已經消失。
當在片段管理器上調用replace()
時,不應該對相應片段和掛起的網絡調用進行垃圾收集。
我最初認爲這將歸結爲我用於網絡管理的靜態類,即執行的線程與片段不同,這意味着當片段被替換時,線程與網絡調用仍然存在,但不是如此,因爲將該類更改爲具體類並在片段內實例化它並不能解決問題。
我試過以下的東西,它們根本沒有幫助它。
- 將靜態類更改爲具體類並實例化每個片段內的實例。
- 拆卸碎片經理
replace()
調用.remove(oldFrag).add(newfrag)
這是一個非常大的問題,對我來說,所以如果任何更多經驗的Android開發者可以幫腔,我會很感激。
乾杯。
編輯 - 如果我能得到,爲什麼我的問題是正在downvoted它會走很長的路,以確保我提出更好的問題的一些反饋。
謝謝!這實際上是非常有意義的。來自iOS開發,我只是假設在片段被銷燬後,回調不會被觸發。謝謝你的幫助。 – alexcatch