1. 程式人生 > >Android——碎片事務調用失敗

Android——碎片事務調用失敗

ans 網絡 roi 定時 action 判斷 on() intra 足夠

遇到一個情況:

在一個定時器中,每秒發起一次網絡請求查詢訂單支付狀態,如果支付成功,則在response中發出一條信息;

handler中收到信息,則控制碎片切換。

結果遇到了一個錯誤:就是碎片切換事務報錯,存在 空對象調用beginTransaction() 。

原因:因為定時器每秒發出請求,上一秒發出的網絡請求的響應還沒回來,下一秒又發出;結果上一個請求的響應到達後,控制了碎片切換,此時碎片對象已經被替換(但未被銷毀),而頁面切換後第二個網絡請求的響應又回來了,所以被替換掉的碎片仍然根據響應結果發出信息,handler中響應信息控制碎片切換,而此時該碎片並不在任何一個activity中,因此也就無法通過 getFragmentManager() 獲得碎片管理器,因此此時 getFragmentManager().beginTransaction() 就會報錯。

解決方法:控制網絡請求發出的頻率

在定時器中,增加一個判斷條件,每隔5秒(自己定,足夠長即可),發出一次網絡請求。

Android——碎片事務調用失敗