Android性能优化(一)APP启动速度优化

引言

一般来说,我们都会将自己的产品与同类的产品进行个比对,不可避免的会去做些性能优化,以达到胜过其他产品的优势。所以,今天我们就来讲讲性能优化的方方面面。

通常我们所说的性能优化,会从以下几个方面入手:
1. APP启动速度优化
2. APP UI流畅度优化
3. 内存优化
4. APP瘦身
5. 电量优化

APP启动速度优化

(1)初识启动方式
APP启动的方式分为3种:;冷启动、热启动、温启动。
-冷启动:应用程序从头开始,需要做大量的工作,耗费的时间最多。
-热启动:系统会把你的活动放在前台,活动有驻留在内存中,比如按了home键。相对于冷启动,开销较低。
-温启动:用户退出应用程序,随后又重新启动,但是活动的进程是有驻留在后台的,比如按了back键退出应用。

(2)为什么白屏?启动慢?

1、Application的onCreate流程,一般来说,在这个方法会进行大量的通用组件的初始化工作;
2、Activity的onCreate流程,布局太过复杂,导致UI布局渲染耗时,影响启动性能。

(3)解决办法
第一种方法:主题切换。这是治标不治本的问题,只是改善了交互的友好性。
主题theme_bg:其中android:opacity=”opaque”参数是为了防止在启动的时候出现背景的闪烁。

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:opacity="opaque">
    <!--黑色背景颜色-->
    <item android:drawable="@android:color/black" />
    <!-- logo-->
    <item>
        <bitmap
            android:gravity="center"
            android:src="@mipmap/ic_launcher" />
    </item>
    <!-- 右上角的图标元素 -->
    <item>
        <bitmap
            android:gravity="top|right"
            android:src="@drawable/launch_screens" />
    </item>
    <!--最下面的文字-->
    <item android:bottom="50dp">
        <bitmap
            android:gravity="bottom"
            android:src="@mipmap/ic_launcher" />
    </item>
</layer-list>

样式style:

<style name="AppTheme.Launcher">
        <item name="android:windowBackground">@drawable/theme_bg</item>
    </style>

在manifest中,将启动页的主题设置为我们定义的主题AppTheme.Launcher:

<activity android:name=".MainActivity"
            android:theme="@style/AppTheme.Launcher">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

在MainActivity中,切换回原来的主题:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //切换回原来的主题,必须在setContentView前调用
        setTheme(R.style.AppTheme);
        setContentView(R.layout.activity_main);
    }

第二种方法:异步加载、延迟加载、多进程时按照进程区分进行一些初始化工作等
主要有以下几种情况需要延迟加载:

该段文本转载自:http://www.jianshu.com/p/f5514b1a826c

1. 数据库及IO操作都移到工作线程,并且设置线程优先级为THREAD_PRIORITY_BACKGROUND,这样工作线程最多能获取到10%的时间片,优先保证主线程执行。

2. 流程梳理,延后执行;
实际上,这一步对项目启动加速最有效果。通过流程梳理发现部分流程调用时机偏早、失误等,例如:
更新等操作无需在首屏尚未展示就调用,造成资源竞争;
调用了IOS为了规避审核而做的开关,造成网络请求密集;
自有统计在Application的调用里创建数量固定为5的线程池,造成资源竞争,在上图traceview功能说明图中最后一行可以看到编号12执行5次,耗时排名前列;此处线程池的创建是必要但可以延后的。
修改广告闪屏逻辑为下次生效。

3.其它优化;
去掉无用但被执行的老代码;
去掉开发阶段使用但线上被执行的代码;
去掉重复逻辑执行代码;
去掉调用三方SDK里或者Demo里的多余代码;
信息缓存,常用信息只在第一次获取,之后从缓存中取;
项目是多进程架构,只在主进程执行Application的onCreate();

具体操作:在启动页Activity或ManiActivity的onCreate中进行延迟操作

getWindow().getDecorView().post(new Runnable() {
  @Override
  public void run() {
    myHandler.post(mLoadingRunnable);
  }
});

相关链接:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值