天天看點

使用ViewPage過程中遇到的OOM及EX

OOM 情景:需要在一個Fragment中使用autobanner輪播圖 和一個靜态viewPager  同時兩者都有關聯Indicator 考慮結構類似決定複用同一個bannerFragment; 然後就悲劇了;連續花了兩個晚上折騰到2點都沒有調試清楚; 直到真正空下來認真研究調試; <-------------------------------以上唠叨,以下正文--------------------------------------> 來圍觀第一個Bug

情景:1.進入就死;2.多次啟動程式加載完圖檔或者使用靜态圖填充後,靜态banner滑動; 下面這個錯誤的原因 : 是在  同一個Fragment 中複用同一個bannenrFragment   viewpager  中pager  ID一樣 系統無法識别。類似遞歸,導緻OOM

使用ViewPage過程中遇到的OOM及EX

解決:複用代碼bannerFragment  但是需要  cpuyi個相同的bannerFragment  xml檔案  并且  pager的ID 需要重新注冊;然後在 bannerFragment中根據需要複用; 另:不同的viewPager需要不同的fm;

解決了這個Bug,但是别開心太早還有 問題 依舊是OOM  (暫時不太清楚原因,後來清楚了) 補充:savestate  觸發機制 是在圖檔加載過程中  關閉或暫停Activity調用 destoryitem()     觸發機制是在圖檔加載完成之後  關閉activity觸發

使用ViewPage過程中遇到的OOM及EX

解決bug思路: 重寫fragmentStatePagerAdapter  中  instantiateItem()、 destroyItem()、saveState()、 restoreState()方法

使用ViewPage過程中遇到的OOM及EX

下面這個錯誤 是因為commit的執行是在Activity 銷毀前 onsaveInstanceState之後進行操作的,此時用commit送出可能 導緻因State丢失而導緻異常,解決方法是commitAllowStateLoss() 官方文檔:

允許在狀态丢失的情況下送出

使用ViewPage過程中遇到的OOM及EX

觸發情景  當Fragment正在加載圖檔   back退出app  

使用ViewPage過程中遇到的OOM及EX

onResponse中調用replace()但是此時Activity已經Ondestory(); 解決思路: 1.異步任務重調用片段方法前,判斷Activity是否存在,2.重寫Ondestory();當destory觸發則停止所有異步任務;

<-------------------------------以上正文,以下唠叨-------------------------------------->

終于有一種便秘365天之後一瀉千裡的暢快了。 性格比較倔強,雖然重心是開發,但是還是想克服難題;但是值得注意的是,在工作中盡量不要這麼 較真,先實作功能為主,閑暇之時可以來研究;迂回,規避都可以;

感觸: 遇到Bug不要怕,無非兩種情況,一,别人能處理,你暫時不能處理,最後你能處理,二、Google從來都沒想過 一個coder要這麼用代碼,您珍重吧----繞行。 在解決一些陌生的Bug時,一開始是很痛苦的但是等真的解決掉,居然特麼的上瘾了我了個xxx,我要打十個! 是以如果是解決bug的時候,首先是要能靜下心自己分析代碼邏輯,反複打日志,反複讓程式炸; 反複看代碼,查文檔,問度娘;并且收集ex、error記錄比對;逐一擊破;然後你就上瘾了;

最後,以上情景适用個例,如有雷同請慎用。 同是天涯代碼狗,相逢何必曾相識;開心,是以決定分享這次經曆;若其他有疑問,大家共同探讨;