Android apk性能优化与工具使用

性能优化一直以来都是一个比较庞大的课题,涉及到的知识面很多。最近特意进行了学习和总结,本文作为一个记录,没有包含全部知识点,只是保留了我个人认为比较常见的。话不多说,发车发车。
在这里插入图片描述

性能优化主要有3个方面:

1.布局
2.资源文件
3.代码

=============================== 分割线 ===============================

1.布局

1.减少布局层级和复杂度
2.布局复用-include标签
3.布局合并-merge标签
4.综合考虑绘制速度和布局层级,合理使用布局(绘制速度:F>L>R)
5.删除无用属性
6.ViewStub延时加载
7.移除activity的window默认背景(默认非空)

2.资源文件

1.去掉未使用的资源文件
2.9.png
3.Shape代替图片
4.使用系统的资源(字符串,颜色,style)

(关于布局跟资源文件这两点,很容易理解,就不举例子。)

3.代码

1.内存泄漏
2.避免创建过多对象
3.变量作用域
4.正则表达式
5.除法改乘法
6.合理使用static
7.合理使用StringBuffer,StringBuilder,String
8.合理使用增强型for循环
9.合理使用软引用、弱引用
10.库函数
11.全局广播
12.IntentService代替Service
13.Application Context代替Activity Context
14.减少使用枚举
15.Receiver、Sensor、File等对象,注意方法成对使用
16.自定义view绘制优化
17.预加载和缓存
18.异步处理耗时
19.减少不必要的网络请求
20.去掉无用代码和依赖库
21.冗余log

=============================== 分割线 ===============================
在这里插入图片描述
在这里插入图片描述

说明:以下例子关于耗时的对比,我们从毫秒的维度来看,对于cpu来说,毫秒的差别其实也是性能上很大的差异。

eg1:正则表达式与常规方式性能对比
在这里插入图片描述
我写了一个很大的常量字符串,用2个方法做相同的操作,判断字符m出现的总次数。正则表达式耗时20ms,常规方式1ms,差别很大。实际证明,正则表达式确实比常规方式更耗费时间

eg2:除法改乘法
在这里插入图片描述
1/1024=0.0009765625

除法耗时4388ms,乘法耗时4356ms,除法比乘法更耗时

eg3:static
在这里插入图片描述

在这里插入图片描述
成员方法分别耗时3655ms、3608ms,static方法分别耗时3548ms、3572ms。static方法性能更优

eg4:foreach for
遍历ArrayList
在这里插入图片描述
遍历array
在这里插入图片描述
遍历LinkedList
在这里插入图片描述
遍历数组结构的数据,用普通for循环效率更高;遍历链表结构的数据,用foreach循环效率更高。
=============================== 分割线 ===============================

性能优化工具:

1.lint
2.Android Profiler
3.leakcanary
4.Layout Inspect

1.lint

给出不规范的编码、多余的资源、可能的bug、以及其它的一些问题,然后会给出修改的建议供我们参考,对于项目的规范性和维护性来说是很有意义的。

eg:
在这里插入图片描述
在这里插入图片描述

2.Android profiler

实时查看CPU、内存、网络使用情况,AS3.0开始推出,取代了曾经的Memory Monitor。

在这里插入图片描述

功能很强大,更多使用参考官方文档:

https://developer.android.google.cn/studio/profile/cpu-profiler

https://developer.android.google.cn/studio/profile/memory-profiler

https://developer.android.google.cn/studio/profile/network-profiler

3.leakcanary

内存泄漏首选检测工具。

使用:

在module的build.gradle中添加依赖:
debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.6.3'
releaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.6.3‘

Application中初始化:
public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        if (LeakCanary.isInAnalyzerProcess(this)) {
            return;
        }
        LeakCanary.install(this);
    }
}

eg:
在这里插入图片描述
在这里插入图片描述
操作:打开MainActivity之后打开SecondActivity,之后连续两次back退出应用。
结果:明显发生泄漏
在这里插入图片描述

4.Layout Inspect

Android官方用来替代Hierarchy Viewer的新方案。

eg:
在这里插入图片描述
在这里插入图片描述
布局显示很直观,还可以看各种属性。曾经遇到过一个诡异的问题,界面只能显示上半屏,下半屏是黑色,以为是布局渲染出了问题,但是layout inspect检查结果是正常的,排除布局问题。后面check发现是底层播放器的一个属性导致。

=============================== 分割线 ===============================
在这里插入图片描述

关于性能优化,总结如下:

在这里插入图片描述

如有什么不正确的地方,欢迎走过路过的小伙伴指正。

发布了42 篇原创文章 · 获赞 24 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/u010725171/article/details/87890278