引言

通常来讲,咱们都会将本身的产品与同类的产品进行个比对,不可避免的会去作些性能优化,以达到赛过其余产品的优点。因此,今天咱们就来说讲性能优化的方方面面。css

一般咱们所说的性能优化,会从如下几个方面入手:

1. APP启动速度优化

2. APP UI流畅度优化

3. 内存优化

4. APP瘦身

5. 电量优化java

APP启动速度优化

(1)初识启动方式

APP启动的方式分为3种:;冷启动、热启动、温启动。

-冷启动:应用程序从头开始,须要作大量的工做,耗费的时间最多。

-热启动:系统会把你的活动放在前台,活动有驻留在内存中,好比按了home键。相对于冷启动,开销较低。

-温启动:用户退出应用程序,随后又从新启动,可是活动的进程是有驻留在后台的,好比按了back键退出应用。android

(2)为何白屏?启动慢?

一、Application的onCreate流程,通常来讲,在这个方法会进行大量的通用组件的初始化工做;

二、Activity的onCreate流程,布局太过复杂,致使UI布局渲染耗时,影响启动性能。

(3)解决办法

第一种方法:主题切换。这是治标不治本的问题,只是改善了交互的友好性。

主题theme_bg:其中android:opacity=”opaque”参数是为了防止在启动的时候出现背景的闪烁。web

android:opacity="opaque">
android:src="@mipmap/ic_launcher" />
android:src="@drawable/launch_screens" />
android:src="@mipmap/ic_launcher" />

样式style:数据库

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

android:theme="@style/AppTheme.Launcher">

在MainActivity中,切换回原来的主题:性能优化

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

第二种方法:异步加载、延迟加载、多进程时按照进程区分进行一些初始化工做等。

主要有如下几种状况须要延迟加载:markdown

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);
}
});

相关连接:

架构