网站在备案期间怎么建设,wordpress 轻博客 主题,织梦 别人 网站 模板,天津网站制作福州Android应用启动过程 Android应用启动过程#xff0c;主要包含app::onCreate及执行前的Application阶段及Activity::onCreate执行之后的Activity阶段#xff0c;以及两个阶段之间的间隙handleMessage阶段和最终页面渲染上屏完成前数据加载阶段四个区间组成。 具体来看#x…Android应用启动过程 Android应用启动过程主要包含app::onCreate及执行前的Application阶段及Activity::onCreate执行之后的Activity阶段以及两个阶段之间的间隙handleMessage阶段和最终页面渲染上屏完成前数据加载阶段四个区间组成。 具体来看当App图标被点击后zygote 进程 fork出当前应用进程然后执行 ActivityThread 的 main方法读取安装包中的二进制文件并最终触发执行bindApplication方法。 接下来是对二进制中的符号进行解析及加载应用中需要的java类。这是我们在应用中能触达到的最早的阶段attachBaseContext阶段该阶段也是我们最早的执行预加载等用户自定义代码的时机。通常在这一阶段我们可以对dex的加载过程进行干预如进行MultiDex优化。 然后是加载依赖的第三方组件。上述所有工作完成后回调app:onCreate方法。该方法是我们执行应用程序中各个模块的初始化及第三方组件的初始化的主要场所。 在app:onCreate执行完成后主线程会收到大量来自子线程的消息当主线程执行完这些任务后才会开始调用Activity的onCreate方法开启应用首屏页面的解析、布局、绘制过程。页面然后根据加载到的数据进行更新最终提交给SurfaceFlinger合成上屏。 可行优化措施 1在attachBaseContext 阶段进行MultiDex优化 2通过类重排减少内存页因PageFault而带来的耗时 3dex2oat时将verify后的结果保存为vdex后续直接加载vdex省略verify步骤 4 对app:onCreate中的初始化操作进行检查删除非必要的初始化任务同时将耗时任务改为子线程或异步 5在handleMessage阶段对子线程任务进行重排减少任务间间隙 6设置启动图片避免启动过程中显示白屏 7Activity:onCreate阶段避免IO等阻塞主线程的操作复杂任务改为子线程或者进行预加载 8DecoreView预加载 9优化页面布局代码或提前将xml转为代码配合inflate减少xml解析及视图初始化耗时 10设计并实现异步任务调度、异步IO、异步UI、网络请求等通用框架简化性能优化过程