App启动优化

一、android系统初始化流程

1. 系统的启动

(1)打开电源 引导芯片代码加载引导程序Boot Loader到RAM中去执行
(2)BootLoader把操作系统拉起来
(3)Linux 内核启动开始系统设置,找到一个init.rc文件启动初始化进程
(4)init进程初始化和启动属性服务,之后开启Zygote进程
(5)Zygote开始创建JVM并注册JNI方法,开启SystemServer
(6)启动Binder线程池和SystemServiceManager,并启动各种服务
(7)AMS启动Launcher

2. Launcher启动

(1)通过adb shell dumpsys activity activities查看当前的activity名
(2)查看进程adb shell ps
(3)application
(3.1)当我们用手点击一个图标时,就到了这个类public final class Launcher extends Activity
执行onClick(View view)方法,会把这个应用的相关信息传入
先获取一个intent--->startActivitySafely(v, intent, tag)--》startActivity(v, intent, tag);-->startActivity(intent);
(3.2)startActivity(intent)会开一个APP进程


App启动优化_第1张图片
image.png

(3.3)ActivityThread.java做为入口 用attach开启app 再加载application和activity
thread.attach(false);---》mgr.attachApplication(mAppThread)会通过远端进程去
回调private void handleBindApplication(AppBindData data)
Application app = data.info.makeApplication(创建Application对象
mInstrumentation.callApplicationOnCreate(app);----》 app.onCreate();

3.黑白屏问题

(1)样式主题文件
(1.1)

 白屏    
    
    
再在功能清单中的单独activity下设置

4.QQ中的用法

true
@null

4.Trace工具分析代码执行时间

(1)

Debug.startMethodTracing(filePath);
中间为需要统计执行时间的代码
Debug.stopMethodTracing();

(2)adb pull /storage/emulated/0/app1.trace把文件拉出来分析
把pull到电脑上的文件拖到AS中就可以分析了
(3)优化方案:
1.开线程 没建handler 没操作UI 对异步要求不高
2.懒加载 用到的时候再初始化,如网络,数据库操作

你可能感兴趣的:(App启动优化)