1. 程式人生 > >Android viewpager與fragment切換重新整理引起的ANR

Android viewpager與fragment切換重新整理引起的ANR

問題描述:切換底部的tab頁,每次切換tab頁都會重新整理頁面資料,反覆操作就會出現ANR。

bug日誌:

ANR in com.jieyue.jieyue (com.jieyue.jieyue/.ui.activity.MainActivity)
PID: 29494
Reason: Input dispatching timed out (Waiting to send non-key event because the touched window has not finished processing certain input events that were delivered to it over 500.0ms ago.  Wait queue length: 6.  Wait queue head age: 28986.1ms.)

問題分析: 從上述日誌我們可以分析出,在我們觸控視窗的時候,頁面不能及時響應,大概需要等待28986.1ms。我們都知道在Android中Activity的最長執行時間是5s,BroadcastReceiver的最長執行時間則是10秒。超過這段時間不能響應就會出現ANR提示,帶給使用者不好的體驗。

解決方案:(我們都知道這是由於每次切換tab頁面都會重新發送請求,導致請求過多需要排隊不能及時響應。那下面我們就來了解一下ViewPager頁面的預載入機制)

認識ViewPager頁面預載入機制

viewPager的頁面快取機制預設是倆個。

mViewPager.setOffscreenPageLimit(3);

在空閒狀態下,設定在檢視層次結構中當前頁的任意一側應該保留的頁數。超過此限制的頁面將在需要時從介面卡重新建立。我們一共有4個tab頁,所以我們為3就可以了。