Open zgq105 opened 5 years ago
性能优化是指通过优化代码来达到优化软件的目的。优化的作用可以使软件的健壮性、稳定性更好,同时提升软件的用户体验。
内存泄漏是指本该被GC来释放内存空间,由于它还存在引用,使得内存得不到回收,造成内存空间的浪费。常见的内存泄漏主要包括如下几点:
//错误示范
public static Test getInstance(Context context) { mContext=context; return ourInstance; }
//正确示范
public static Test getInstance(Context context) { mContext=context.getApplicationContext(); return ourInstance; }
private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { default: break; } } };
private static class MyHandler extends Handler{ private WeakReference<Context> mWeakReference=null; public MyHandler(Context context){ mWeakReference=new WeakReference<>(context); } @Override public void handleMessage(Message msg) { super.handleMessage(msg); Context context= mWeakReference.get(); switch (msg.what) { default: break; } } }
频繁GC指大量对象在短时间内被创建,又需要在短时内内销毁的现象。比如在onDraw中通过new创建对象就会导致频繁GC;因此在平时开发中需要注意不要在onDraw去初始化创建对象,而是应该把初始化创建对象的工作放在构造方法中去执行。
内存抖动为什么会引起OOM? 由于频繁GC导致了内存碎片,当内存紧张时,由于这些内存不连续,导致无法分配,系统直接就返回OOM。
OOM是指申请的内存空间超过了最大剩余的内存空间就会导致OOM。在安卓中,图片加载比较容易导致OOM,因此在使用的过程中需要做好优化或者使用Glide等库来管理图片的加载。
主要是通过BitmapFactory.Options类中的属性去设置优化图片的加载和使用。
主要通过设置全局缓存对象,通过软引用或者弱引用去实现。(LruCache)
使用LeakCanary监测内存泄漏问题;使用MAT查看内存占用问题。
安卓性能优化是一个老生常谈的问题,需要我们在开发过程中养成良好的编码习惯就可以避免大部分的性能问题。真正的优化,是我们在项目中总结出来的,慢慢体会优化过程涉及的知识点。
1. 什么是性能优化?优化的作用?
性能优化是指通过优化代码来达到优化软件的目的。优化的作用可以使软件的健壮性、稳定性更好,同时提升软件的用户体验。
2. 内存优化
2.1 内存泄露
内存泄漏是指本该被GC来释放内存空间,由于它还存在引用,使得内存得不到回收,造成内存空间的浪费。常见的内存泄漏主要包括如下几点:
//错误示范
//正确示范
//错误示范
//正确示范
2.2 频繁GC(内存抖动)
频繁GC指大量对象在短时间内被创建,又需要在短时内内销毁的现象。比如在onDraw中通过new创建对象就会导致频繁GC;因此在平时开发中需要注意不要在onDraw去初始化创建对象,而是应该把初始化创建对象的工作放在构造方法中去执行。
内存抖动为什么会引起OOM? 由于频繁GC导致了内存碎片,当内存紧张时,由于这些内存不连续,导致无法分配,系统直接就返回OOM。
2.3 OOM问题
OOM是指申请的内存空间超过了最大剩余的内存空间就会导致OOM。在安卓中,图片加载比较容易导致OOM,因此在使用的过程中需要做好优化或者使用Glide等库来管理图片的加载。
2.4 图片压缩
主要是通过BitmapFactory.Options类中的属性去设置优化图片的加载和使用。
2.5 缓存池的设置
主要通过设置全局缓存对象,通过软引用或者弱引用去实现。(LruCache)
2.6 使用工具监测内存使用情况。
使用LeakCanary监测内存泄漏问题;使用MAT查看内存占用问题。
3. UI优化
4. 网络优化
4.1 线程优化
4.2 KO网络优化
5. 电量优化
6. 小结
安卓性能优化是一个老生常谈的问题,需要我们在开发过程中养成良好的编码习惯就可以避免大部分的性能问题。真正的优化,是我们在项目中总结出来的,慢慢体会优化过程涉及的知识点。