性能优化

在Android优化从以下四个方面优化:
1.稳定(内存溢出、崩溃)
2.流畅(卡顿)
3.耗损(耗电、流量、网络)
4.安装包(APK瘦身)

一、内存优化

避免内存泄漏

内存泄漏就是长的生命周期对象持有短的生命周期对象!
长的生命周期:耗时操作
短的生命周期:Activity、Fragment
少量的内存泄漏会导致卡顿,内存泄漏严重会导致OOM

内存抖动

短时间内内存泄漏严重,频繁触发GC(GC触发的时候会阻塞主线程,会导致界面卡顿,如果GC来不及回收就导致OOM)
GC的触发是不定时的,由Java虚拟机控制,但是内存不足的时候一定会触发

1.1 解决内存泄漏

避免常见的内存泄漏

Handle导致的内存泄漏:

1、发送延时消息时,当Activity销毁,Handle没有移除任务,会造成内存泄漏
2、匿名内部类导致的内存泄漏
解决方案:
使用弱引用WeakReference<OnReceiveMessageListener>包裹对象
将匿名内部类用Static修饰,变成静态内部类


线程导致的内存泄漏:

开启了一个线程做耗时操作,当Activity销毁的时候,想成任务没有结束,就造成了线程的内存泄漏
解决方案:
1.在onDestory方法中将线程close掉
2.将线程改为静态内部类

三方控件未注销:

1、EventBus注册却没有注销造成的内存泄漏
在onDestory中取消注册
2、RxJava进行耗时操作,如果没有解绑会出现内存泄漏
在onDestory中使用Disposable对象移除任务

MVP存在内存泄漏:

因为context对象使用不当造成的内存泄漏

错误的使用单例:

在单例中经常使用到上下文对象,通常传的都是Activity的上下文对象
但当Activity销毁就会出现内存泄漏
把Activity的上下文对象换成Application上下文对象

1.2 内存泄漏检测工具:

  • LeakCanary工具 :
    LeakCanary是一个内存监测工具,该工具是Square公司出品的,
    可以很明确的看出内存泄漏的地方
    在Gradle里引用:

debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.5'

  • Memory Monitor 工具:
    Memory Monitor是Android Studio自带的一个内存监视工具,它可以很好地帮助我们进行内存实时分析。通过点击Android Studio右下角的Memory Monitor标签,打开工具可以看见较浅蓝色代表free的内存,而深色的部分代表使用的内存从内存变换的走势图变换,可以判断关于内存的使用状态,例如当内存持续增高时,可能发生内存泄漏;当内存突然减少时,可能发生GC等
    当发生内存泄漏的时候无法准确的判断内存泄漏的地方

二、布局优化:

  • 布局复用,使用 <include>标签重用layout;
  • 提高显示速度,使用 <ViewStub>延迟View加载;
  • 减少层级,使用 <merge>标签替换父级布局;
  • 注意使用wrap_content,会增加measure计算成本;
  • 删除控件中无用属性;

三、启动优化:

应用一般都有闪屏页,优化闪屏页的 UI 布局,可以通过 Profile GPU Rendering 检测丢帧情况。
也可以通过启动加载逻辑优化。可以采用分布加载、异步加载、延期加载策略来提高应用启动速度。
数据准备。数据初始化分析,加载数据可以考虑用线程初始化等策略。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容