Android App 性能优化之启动优化

冷启动和热启动

1. 冷启动
当启动应用时,后台没有该应用的进程,系统会重新创建一个新的进程分配给该应用,然后再根据启动的参数,启动对应的进程组件。

2. 热启动
当启动应用时,后台已有该应用的进程
(例:按back键、home键,应用虽然会退出,但是该应用的进程是依然会保留在后台,可进入任务列表查看),所以在已有进程的情况下,这种启动会从已有的进程中来启动对应的进程组件。

1.冷启动优化
1.1 分析
谷歌对启动时长的定义

  • ThisTime

最后一个 Activity 的启动耗时(例如从 LaunchActivity - >SplashActivity「adb命令输入的Activity」 , 只统计 SplashActivity 的启动耗时)

  • TotalTime

所有Activity启动耗时
即应用的启动时间,包括 创建进程+Application初始化+Activity初始化到界面显示
非严谨、精确的时间,线下使用方面,线上不可用

  • WaiteTime

ActivityManagerService启动App的总耗时

  1. 通过adb命令方式
    在这里插入图片描述

  2. 通过logcat方式
    在这里插入图片描述

1.1 视觉优化
App出现短暂黑屏和白屏现象。

其原因在于:应用启动时WindowManager会去加载App主题样式中的windowBackground 而这个背景是根据当前应用的主题背景色决定的

解决办法(优化视觉效果,对于启动耗时没有什么本质性帮助)

  • App主题背景设置成透明样式
    参考代码
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:windowFullscreen">true</item>
        <item name="android:windowIsTranslucent">true</item>
    </style>
  • App设置图片背景主题
    参考代码
	<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> 
		<item name="android:windowBackground">@drawable/ic_launch</item>
		<item name="android:windowFullscreen">true</item> 
		<item name="android:windowDrawsSystemBarBackgrounds">false</item>
	</style>

1.2 代码优化

  • Application 初始化减负
    将Bugly,友盟等组件放到子线程中初始化。(子线程初始化不能影响到组件的使用)
	new Thread(new Runnable() {
            @Override
            public void run() {
                //设置线程的优先级,不与主线程抢资源
                android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_BACKGROUND);
                // 子线程初始化第三方组件
            }
    }).start();

将需要在主线程中初始化但是可以不用立即完成的动作延迟加载

	new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                //延迟初始化组件
            }
    }, 3000);
  • 首页 Activity 减负
    过于复杂的布局
    加载大Bitmap
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值