当下有非常多的APP,但其实开发APP并不是一件简单的事情,需要花费程序员大量的时间和精力,如果APP的性能不好,用户使用体验感差,打开页面等待时间过长,他们就有可能卸载此软件。我们可以使用友盟+推出的U-APM来测试APP在不同设备的启动时间,然后对性能进行优化。

硬件的内存总是有限的,所有每个应用分到的内存也是有限的,所有内存的优化很有必要,否则应用就没有足够的内存使用了,这个时候就会 Crash ,今天来说说性能优化之内存的优化。

1、内存优化

减少内存的使用,主要是避免创建过多对象占用过多内存、避免内存抖动以及避免内存泄漏。

内存抖动即频繁地创建和销毁内存,在这个过程中,垃圾回收器也会频繁工作,对内存性能造成影响。

内存泄漏即应该被Garbage Collection回收的内存,由于还在被其他对象引用,导致无法被回收。内存泄漏是比较严重的问题,过多的内存泄漏会导致内存溢出,产生Out Of Memory的系统错误。

造成内存泄漏的原因主要有:

单例类引用Context造成内存泄漏;非静态内部类引用外部类造成内存泄漏;handler引用activity造成内存泄漏;属性动画没有取消,导致view一直被引用造成内存泄漏;监听器没有取消、回调没有反注册。

内存优化的措施有

使用线程池复用线程,因为线程本身会占用相对比较大的内存,复用就可以省下部分内存。

在onDraw方法内避免创建对象。因为onDraw会被频繁调用,导致其内部的对象也会被频繁创建,占用过多内存。

尽量使用StringBuilder或StringBuffer拼接字符串,减少String的使用。(因为拼接字符串时,String会创建新的对象,而StringBuilder、StringBuffer是在原字符串基础上拼接)。

视图资源不可见时进行清除,避免占用内存。如Bitmap执行recycle方法进行清除、对图片和lottie资源进行销毁。

针对内存泄漏的问题进行优化:

①单例类应引用Application的Context,因为Application的Context的生命周期是和APP一致的,不会造成单例类引用某个activity的context以致该activity无法被回收的问题。

②将非静态内部类改为静态内部类,这样就不会引用外部类。

③handler:a.handler使用结束时调用removeCallbacksAndMessages(null)清除队列;b.静态内部类+弱引用方式可避免内存泄漏。

④属性动画、监听器使用结束应及时取消,广播或其他一些外部库的回调应该及时反注册。

总之Android性能优化很难,方向也很多。可以通过测试去提升性能,往往能针对问题做预先准备。也往往能更核地提升核性能瓶颈,从带来的全位提升。友盟+U-APM帮你更快找到问题所在。

U-APM应用性能监控平台,通过轻量级的集成接入即可拥有实时、可靠、全面的应用崩溃、ANR、自定义异常等捕获能力, 及卡顿、启动分析、内存分析、网络分析等性能监测能力,支持多场景、多通道智能告警监测,帮助 开发者高效还原异常、卡顿用户的访问路径和业务现场,缩短故障排查时间。提供云真机测试能力, 助力开发者从研发测试质量验收到线上问题复现排查,保障应用品质,提升测试效率。在云真机测试 期间自动采集崩溃信息,提供详尽的崩溃报告协助筛查,真正实现监控测试全流程深度打通。

举报/反馈

科技与热门

137获赞 3.1万粉丝
每一天都充满着希望。
关注
0
0
收藏
分享