Android viewpager與fragment切換重新整理引起的ANR
阿新 • • 發佈:2018-12-11
問題描述:切換底部的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就可以了。