安卓性能优化—App启动优化

95 篇文章 0 订阅

要优化App的启动优化,

首先我们需要知道安卓系统的启动流程:(下面流程都是C++代码)

当我们按下手机的电源键时,会触发手机的引导芯片,引导芯片会把BootLoader程序(写入到硬件的引导代码)加载到RAM(存储器)中去执行。

BootLoader把操作系统拉起

Linux系统init初始化设置,启动init进行和属性服务,开启一个zegote进程

zegote会创建JVM(虚拟机)并注册jni方法;开启systemservice

系统服务会启动binder线程池和systemservicemanage,通过system和systemservicemanager会启动各种服务例如activitymanageservice,windmanageservice..;

 

activitymanageservice会去启动一个launcher(系统桌面启动器,手机启动看到界面就是launcher)

当我们点击launcher的应用图标是,launcher会把应用的信息保存到intent里面,最终调用startactivity(intent),通知activitymanageservice ;

activitymanageservice会在JVM里面开辟一块内存:堆,栈,方法区;同时通知zygote

zygote会fork一个systemservice

systemservice会创建一个activitythread进程(App进程)

↓ ↓

activitythread作为App的入口会先实例化application,再实例化 activity,(注意application的生命周期方法比activity的生命周期方法先执行) 再通过attach 把activity和application绑定(目的activity获取application的content)

 

//由于上面都是系统执行,不能直接优化

//application oncreate>> -------这中间Java代码可以优化---------- >>activity oncreate

1》启动时黑白屏的优化

黑白屏的产生:因为app启动时需要时间初始化,系统解析manifest的AppTheme主题的windbackground属性设置preview window背景颜色 ,SDK不同版本的windowbackground 颜色默认为黑色 或者 白色,导致黑白屏问题。

<!--方案1  京东 利用预加载 设置广告图片  不推荐-->
<!--<item name="android:windowBackground">@mipmap/t</item>   //黑白屏优化 ,增加GPU渲染-->


<!--方案2  设置不预加载每个activity不设置背景颜色默认为黑色  不能复用背景颜色增加GPU渲染 -->
<!--<item name="android:windowBackground">@null</item>  //优化GPU过度渲染问题-->
<!--<item name="android:windowDisablePreview">true</item> //设置不预览  优化黑白屏问题-->


<!--方案3  直接设置背景颜色透明   解决黑白屏问题  
<item name="android:windowBackground">@android:color/transparent</item>   //优化GPU过度渲染问题
<item name="android:windowIsTranslucent">true</item>    //黑白屏优化(单独设置 小米8.0版本手机有异常
)

 

2》Application 的代码优化

App启动优化核心 尽量减少在application oncreate 到 activity oncreate之间的代码 特别是耗时代码

可以在application 使用系统工具测试那些代码耗时,做对应的处理

 

//总结:App的启动优化大概分两方面 

1优化入口activity的黑白屏问题,(可以利用黑白屏做广告页面;或者设置为透明色)

2优化 在Application初始化的代码 使用代码耗分析工具 分析那些代码耗时,能不放在application初始化的代码就尽量不要放

---------------------------------------------------------安卓分析代码执行时间工具-------------------------------

File file = new File(Environment.getExternalStorageDirectory(), "app1.trace");
Log.i("zdh", "onCreate: " + file.getAbsolutePath());
//把分析结果存在一个文件
Debug.startMethodTracing(file.getAbsolutePath());

//  ------中间执行的代码--------
Toast.makeText(this, "测试", Toast.LENGTH_SHORT).show();
Debug.stopMethodTracing();

权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

在需要保存下载后的分析报告文件 输入cmd  执行命令adb pull /storage/emulated/0/app1.trace

把文件拉出来分析把pull到电脑上的文件拖到AS中就可以分析了 

主要分析Thread time时间 ,Top Down类型的,看那些方法耗时多

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值