引言
通常来讲,咱们都会将本身的产品与同类的产品进行个比对,不可避免的会去作些性能优化,以达到赛过其余产品的优点。因此,今天咱们就来说讲性能优化的方方面面。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);
}
});
相关连接:
架构