冷启动的定义
当用户启动一个app的时候,后台没有该进程,这时候需要重新启动一个进程,这个启动过程就是冷启动;
Application的构造器方法——>attachBaseContext()——>onCreate()——>Activity的构造方法——>onCreate()——>配置主题中背景等属性——>onStart()——>onResume()——>测量布局绘制显示在界面上。
启动时的白屏问题,可以在activity中的theme中设置 windowBackGround 为透明,windowIsTranslucent true,windowNoTitle true; 这里需要注意一个问题,那么activity的布局文件一定要设置背景,不然就全透明了。
优化的思考---要提高启动速度,那只有一条就是减少ui线程的负荷,尽量把ui线程的工作降低;
1.数据的延迟加载(app启动时,有些数据不是app启动的前置条件,有些初始化也不是前置条件)这些工作就可以延迟处理,或者放在异步线程处理。有时候反序列化的工作,json解析的工作都很耗时,这些工作可考虑延迟处理。
2.减少activity的布局层次,减少布局的重绘。
3.在合适的时候使用AsyncLayoutInflater,基本用法如下:
new AsyncLayoutInflater(this).inflate(
R.layout.activity_main,
null,
new AsyncLayoutInflater.OnInflateFinishedListener() {
@Override
public void onInflateFinished(View view, int resid, ViewGroup parent) {
//Do something with view
}});
AsyncLayoutInflater有几个局限性
1、 parent的 generateLayoutParams() 函数必须是线程安全的。
2、 所有正在构建的views一定不能创建任何 Handlers 或者调用 Looper.myLooper 函数。
3、 不支持设置LayoutInflater.Factory也不支持LayoutInflater.Factory2
4、 不支持包含Fragments的inflatinglayouts
如果我们尝试异步的方式去inflate的layout不支持这种方式,那么inflation处理将会自动回退到主线程中
网友评论