IdleHandler,页面启动优化神器

  • 时间:
  • 浏览:3

adb logcat -s ActivityManager | grep "Displayed"

no code no truth

原文发布时间为:2018-11-13

由许多思路我把被委托人负责的页面中的许多界面的绘制逻辑挪到了IdleHandler中,导致 有LoadingView时间,我把Adapter的绑定也挪出去了。看下优化前后效果图 

第3个问题:启动时间是包括了那此流程,是怎么可以被计算出来的呢?

效果还是挺明显的。

到了此处就算真正调用到了onResume的土土土办法。

在performResumeActivity 中进行了onResume的回调,在wm.addView 中进行了绘制,如果onResume的土土土办法是在绘制之前 ,在onResume中做许多耗时操作能够影响启动时间。

Launch the process.

最末尾的步骤5是绘制你的界面。如果 全部的启动时间是要到绘制完成为止。

来一张图说明一下,明显的IdleHandler在onResume以及performTraversals绘制之前 调用 

Initialize the objects.

Create and initialize the activity.

第另3个 问题:有那此土土土办法能够去统计页面的启动时间呢?

从许多源码可知道,IdleHandler即在looper顶端的message处里完了的之前 去调用,这不如果 朋友onResume调用完了之前 的时机么。

Draw your application for the first time.

Inflate the layout.

看顶端的代码,就先放结论了。

App启动主要经过如下2个流程

本文来自云栖社区公司公司合作 伙伴“Android开发中文站 ”,了解相关信息能够关注“Android开发中文站”。



把在onResume以及其之前 的调用的但非能够的事件(如许多界面View的绘制)挪出来找另3个 时机(即绘制完成之前 )去调用。那样启动时间自然就缩短了。如果整体做的事并这麼明显变化。这麼许多时机是那此呢?

既然知道了onResume中做的操作会影响到启动时间,这麼能够另3个 优化启动时间的思路了。

最后在callActivityOnResume 调用了onResume

看下IdleHandler的源码

顶端的命令行可用来进行查看。

如果在performResume中调用了 mInstrumentation.callActivityOnResume(this);



这麼绘制界面对应的是那此之前 呢?一般朋友开发,最晚能被回调的是在onResume土土土办法,这麼onResume土土土办法是在绘制之前 还是之前 呢?

随着App的开发到了某个阶段必然会遇到另3个 需求,那如果 优化页面的启动时间。

下面就剥一下onResume的逻辑,绘制的有兴趣能够被委托人看源码。 首先performResumeActivity中会调用r.activity.performResume();