Android应用性能优化 - 开篇

        Android技术优化日异月新,谷歌在GoogleI / O 2018 上终于发布了Android 9.0,系统性能也已经非常流畅,在我看来已远超某果(哈哈其实是因为我是穷逼用不起某果),但是由于国内各大厂商都会自己定制系统,然后就你懂的,当然不排除部分厂商确实做了一些优化,当然不包括某米,虽然我是某米粉丝,但是系统确实做的稀烂;

在如此背景之下,Android应用性能优化显得更加重要了。我总结的主要以下几个方面进行优化:

        一.安装包大小优化

俗称的APK瘦身,个人觉得这一条是最重要的,推荐几个个人写的自认为做到极致小的APP

最大的安装包也才28.7KB,当然都是一些功能比较单一的APP,但是比较实用;附上两个比较好用的链接:

比较单一的一键锁屏

用于解决微信上发APk文件不能安装的问题(一般都是强制要求安装QQ浏览器才能安装)

我觉得主要是资源(res目录)方面优化,可能会涉及到一些设计层面的; 

1.删除所有没有使用的资源

胆子比较大的可以来;当然如果使用了一些其他语言的插件项目,这么整肯定会出事,很多插件的实现,底层都是通过字符串匹配的方式来找资源;切记如果这么整了,一定要留出充分的测试时间

 

2.使用一套资源

对于绝大对数APP来说,只需要取一套设计图就足够了。鉴于现在分辨率的趋势,建议取720p的资源,放到xhdpi目录。相对于多套资源,只使用720P的一套资源,在视觉上差别不大,很多大公司的产品也是如此,但却能显著的减少资源占用大小,顺便也能减轻设计师的出图工作量了。
注意,这里不是说把不是xhdpi的目录都删除,而是强调保留一套设计资源就够了。

3.利用ProGuard压缩代码去除无用资源,直接链接

4.极致的图片压缩与webp的使用

也可以使用https://tinypng.com/进行压缩

选择一些属性或使用默认的即可完成操作 

4.其他

想做到极致,还有一些其他的操作,不做详细介绍了(andresguard进一步压缩与混淆资源、第三方开源库的瘦身,仅保留自己需要的部分、合理配置去除不必要的配置,仅保留中文配置等、so的优化与配置,只保留一类so(删除armable-v7包下的so,删除x86包下的so)、动态下发一些资源:字库、so、换肤包等)

5.iconfont的字体图标

还有一个我很想使用但是估计只有等我自己开公司才能使用的方法,因为需要多端配合。就是三端都使用iconfont的字体图标, 简单了解下,如下图是我个人收集的和之前在某公司的(还没踢我出项目)

 大概的使用就是:UI在iconfont的官网建一个项目,然后开发的三端下载这套字体图标库放到项目对应位置并配置好;

Web端使用:
<i class="iconfont">&#x33;</i>
Android端使用:
<TextView
    android:id="../../+id/like"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="&#x3605;" />
IOS端使用:
UILabel * label = [[UILabel alloc] initWithFrame:self.view.bounds];
UIFont *iconfont = [UIFont fontWithName:@"uxIconFont" size: 34];
label.font = iconfont;
label.text = @"\U00003439";
[self.view addSubview: label];

        二.内存优化

1.内存溢出:OOM(Out Of Memory),是指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用到的内存大于能提供的最大内存。此时程序就运行不了,系统会提示内存溢出,有时候会自动关闭软件,重启电脑或者软件后释放掉一部分内存又可以正常运行该软件,而由系统配置、数据流、用户代码等原因而导致的内存溢出错误,即使用户重新执行任务依然无法避免。

2.内存泄漏:Memory Leak,是指程序中已动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。

3.内存抖动:Memory Churn,内存抖动是因为在短时间内大量的对象被创建又马上被释放。瞬间产生大量的对象会严重占用内存区域,当达到阀值,剩余空间不够的时候,会触发GC从而导致刚产生的对象又很快被回收。即使每次分配的对象占用了很少的内存,但是他们叠加在一起会增加Heap的压力,从而触发更多其他类型的GC。这个操作有可能会影响到帧率,并使得用户感知到性能问题。

发生这些问题基本都可以使用工具(LeakCanary、Memory Profiler)检测基本都是可以从代码方面优化;

        三.流畅度优化

1.UI 绘制:一般就是不要在主进程去做耗时的操作,提升UI的绘制速度; Android的绘制需要经过onMeasure、onLayout、onDraw,布局的层级越深、元素越多、耗时也就越长, 可以使用ConstraintLayout来解决

2.页面跳转/事件响应:跳转时不做任何耗时操作

3.卡顿:通过工具(BlockCanary)检测分析原因

4.崩溃:这个一般相对简单,分析日志找到对应的Exception

        四.启动速度优化

1.利用主题去防止出现白屏

2.尽可能减少Application的onCreate中所要做的事情

3.UI渲染优化,去除重复绘制,减少首页UI重复绘制时间,可能需要从设计的角度去解决,首页的设计在不影响产品的情况下尽量简洁

4.Android5.0以下MultiDex.install(Context context)的dexopt过程耗时过长

        五.耗损优化

1.耗电:合理的使用集中定位的方式,很多只需要一个大概位置的也用了高精度的定位;传感器及时关闭、谨慎的使用屏幕唤醒Wake Lock、减少后台的不要的操作等...检测可以利用battery-historian 

2.网络:说实话现在的APP基本都不考虑这个问题了;简单说一下,就是页面切换时减少非必要刷新,非必要实时刷新的数据可以考虑使用缓存或数据库

不正之处敬请批评指正

主要参考资料:

百度百科

https://mp.weixin.qq.com/s/QVOYF2nfoWMCbM5YsxQgRQ?

https://blog.csdn.net/xiangzhihong8/article/details/92800490

https://blog.csdn.net/u012124438/article/details/54958757

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值