「性能优化1.0」启动分类及启动时间的测量
「性能优化1.1」计算方法的执行时间
「性能优化1.2」异步优化
「性能优化1.3」延迟加载方案
一、延时加载
1.1、为什么要延迟加载?
我们在 MainActivity 中优先应该展示视图给用户,而一些其它的数据可以将其延迟再去初始化,例j如我们一般会在进入 MainActivity 时去检测一下当前是否是新用户来确定是否要显示引导图,或者读取当前未读的消息等,这些操作要求的及时性并不是那么高,这样就不会影响视图的展示。
1.2、延迟加载的方案是什么?
- 常规实现
在 MainActivity#OnCreate
执行一个 postDelayed(Runnable r, long delayMillis)
- 更优方案
使用 IdleHandler
1.3、常规方案
postDelayed(Runnable r, long delayMillis)
这种方案的伪代码如下:
//MainActivity.java
public void onCreate(...) {
...
mainHandler.postDelay(new Runnable(){
public void run() {
//具体要做的延迟加载
//例如读取未读消息
showTipPopWindow();
//用户当前登录状态等
checkUnReadMsg();
}
},500);
...
}
从伪代码中可以看出,这种方式确实可以做到数据的延迟加载,但是其缺点是很明显的:
时间不好把控,不能确定 delay 多少时间。如果时间设置过短,那么此时 UI 还没渲染完毕,这势必会阻塞到 UI 的渲染,如果过长,那么又导致延迟时间变长了。
1.4、更优方案
1.4.1、IdleHandler 处理延迟加载
源码位置:MessageQueue.IdleHandler
先列出来 IdleHandler 的源码。
/**
* Callback interface for discovering when a thread is going to block
* waiting for more messages.
*/
public static interface IdleHandler