学习自:https://juejin.im/post/5a6fd7b86fb9a01ca47ac6e8
假想网络很差的这样一个场景,我们非得等网络请求到位以后才更新UI的数据吗?一直给以一个waiting dialog必然极其影响用户体验。所以,我们需要显示预数据,可以是你预定义的默认数据,也可以是用户之前使用过的我们偷偷IO缓存下来的数据。
这证明了一个道理:我们需要在UI显示后,再进行耗时操作。(讲的比较牵强,不过就是这么个道理)
我们需要找到UI真正测绘完毕的时机,如果想深究UI测绘时机的源码,可以看
https://blog.csdn.net/qq_36523667/article/details/79671718
这里简单告诉你下结论:
在resume的过程中,我们的decor 会被添加到phone window中去
add后,view的测绘就会被调用
所以我们需要拿到这个被调用的时机。
在view被调用的过程中,一个msg会被抛出到looper中执行,在activity活动生命周期中,会不断有msg被抛出,来执行活动的生命周期。
我们有一个黑科技叫IdleHandler,他在所有looper中的msg被处理完后,能够得到回调。显然,这就是我们想要的东西。
所以正确做法: