国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android啟動優化之延時加載的步驟詳解

2019-10-21 21:25:55
字體:
來源:轉載
供稿:網友

前言

在應用啟動的時候,為了加快啟動速度,往往需要把一些比較重的操作放到子線程中,或者是延時加載。將任務放在子線程中是一個比較簡單并且看起來有效的操作,但是呢,也不能太過于依賴子線程,它雖然不會阻塞主線程,但是卻會跟主線程搶占CPU,當子線程很多并且任務很重的時候,也還是會拖慢主線程的,不信你可以打出Systrace看一下。延時加載也是一個比較好的策略,但難點就在于延時多久,這個時間并不好掌控。

下面話不多說了,來一起看看詳細的介紹吧

IdleHandler

以前一直在想Android為什么不在Activity或者Fragment中提供一個接口,讓我們可以在主線程空閑的時候去執行一些操作,后來發現真的有,但這個接口不是在Activity和Fragment中,而是在MessageQueue中,在MessageQuque的源碼中可以看到這么一個接口:

/*** Callback interface for discovering when a thread is going to block* waiting for more messages.*/public static interface IdleHandler { /** * Called when the message queue has run out of messages and will now * wait for more. Return true to keep your idle handler active, false * to have it removed. This may be called if there are still messages * pending in the queue, but they are all scheduled to be dispatched * after the current time. */ boolean queueIdle();}

簡單來說,就是當MessageQueue中沒有更多的消息的時候就會回調queueIdle()這個方法,返回true的話,當MessageQueue中沒有消息的時候還會繼續回調這個方法,返回false則會在執行完之后移除掉這個監聽。

原理就是這么簡單了,接下來就是動手優化代碼了,代碼也很簡單。

@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // ... // 拿到主線程的MessageQueue Looper.myQueue().addIdleHandler(new MessageQueue.IdleHandler() { @Override public boolean queueIdle() {  // 在這里去處理你想延時加載的東西  delayLoad();  // 最后返回false,后續不用再監聽了。  return false; } });}

寫起來一點都不難,只是我們需要掌握這么一個知識點而已。這里多說一句,網上很多關于冷啟動優化的文章都說到了ViewPager的懶加載,即等到用戶滑動過去的時候才去加載界面,我們在項目中最開始也是這樣做的,但其實這樣的體驗真的很不好,所以我們利用IdleHandler做了一個延時加載,即不影響主界面的啟動工作,又能在主線程空閑下來的時候立刻去加載出其它的Tab,在性能和體驗之間找到一個最好的平衡。

 

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宁夏| 达州市| 芜湖县| 志丹县| 汶上县| 万州区| 南汇区| 涞源县| 南川市| 伊吾县| 通辽市| 汉沽区| 分宜县| 新邵县| 荣成市| 通州市| 东阳市| 通渭县| 霍城县| 恩平市| 柘城县| 闸北区| 洛隆县| 军事| 上思县| 武山县| 古蔺县| 黔西县| 肥乡县| 理塘县| 彭州市| 烟台市| 平顶山市| 寻乌县| 新巴尔虎左旗| 斗六市| 广平县| 上虞市| 诏安县| 吉隆县| 双桥区|