2017-04-21 84 views
1

我有一個獨特的問題:即使初始化後片段視圖爲空

我有一個viewpager綁定到活動中的tabLayout。 tablayout有5個選項卡,因此有5個不同的片段。活動中有一個微調器,其值定義了用戶訪問該選項卡時每個片段將顯示的內容。所以我創建了一個回調機制,通過該機制,當用戶在標籤頁上滑動或點擊時,會從活動的所有片段中調用回調,通知片段是否顯示給用戶。基於這個觀點進一步繪製的價值觀。

這對我來說就像一個魅力。當應用程序在後臺(未殺死/完成)中停留大約30分鐘或1小時或更長時,問題就出現了。我有華碩Zen手機,它具有增強內存功能,如果我使用,那麼我可以很容易地重新創建問題。

問題是,經過很長時間(看起來Android會清理內存視圖),當我再次啓動應用程序時,它會嘗試再次繪製相同的視圖(無需啓動屏幕),這是正確的。片段的onAttach(Activity)在Activity的onCreate完成後調用。我正在使用butterknife 7.0.1來綁定視圖。片段的onCreateView也被調用,我可以看到recyclerview對象也被綁定並用一個值初始化。當我點擊標籤時,回調被調用到這個片段,那時我看到相同的recyclerview是空的。只有當我們嘗試在一段時間後啓動應用程序時纔會發生這種情況,否則它會很好地工作。

我花了2天,但我很無能誰使對象空或正在發生的事情。

[已解決]

找到解決方案後立即編輯。

問題:在Activity被onCreate接收到onSavedInstance清除之前,操作系統用於記住實例,並調用super.onCreate(onSavedInstance);

這基本上是我們以前在初始化狀態下有片段的原因,然後作爲活動一部分的視圖尋呼機試圖創建新的片段。我不確定爲什麼在創建新片段時不調用片段的onCreateView。但無論如何,通過傳遞null來super.onCreate(空)該活動的onCreate基本保障,任何國家保存,我們得到一個乾淨的新推出的這工作。

+0

我們可以用來重現問題的一些代碼會很好。 – csmckelvey

+0

我進一步調試不同的角度。發現問題。 os確實會清除碎片和活動,當我們再次啓動應用程序時,它會嘗試從其保存的實例中重新創建。然而,發生的事情是viewpager是新創建的,因此創建了新的片段。但在此之前viewpager創造了新的片段,老savedinstances由OS嘗試了,因此我們看到,recyclerview有一個實例,當被viewpager創建的frag的新實例,再後來就沒有任何instance.The現在的問題是不會調用新碎片的onCreateView –

回答

0

我也經歷過同樣的問題,它可以很容易地被複制: 轉到開發人員選項 - >應用程序 - >不保留活動並啓用它。由此,可以模擬操作系統清潔並且可以避免等待幾小時以再現崩潰。