zgq105 / blog

2 stars 0 forks source link

Android性能优化总结 #60

Open zgq105 opened 5 years ago

zgq105 commented 5 years ago

image

1. 什么是性能优化?优化的作用?

性能优化是指通过优化代码来达到优化软件的目的。优化的作用可以使软件的健壮性、稳定性更好,同时提升软件的用户体验。

2. 内存优化

2.1 内存泄露

内存泄漏是指本该被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;
            }
        }
    }

内存抖动为什么会引起OOM? 由于频繁GC导致了内存碎片,当内存紧张时,由于这些内存不连续,导致无法分配,系统直接就返回OOM。

2.3 OOM问题

OOM是指申请的内存空间超过了最大剩余的内存空间就会导致OOM。在安卓中,图片加载比较容易导致OOM,因此在使用的过程中需要做好优化或者使用Glide等库来管理图片的加载。

2.4 图片压缩

主要是通过BitmapFactory.Options类中的属性去设置优化图片的加载和使用。

2.5 缓存池的设置

主要通过设置全局缓存对象,通过软引用或者弱引用去实现。(LruCache)

2.6 使用工具监测内存使用情况。

使用LeakCanary监测内存泄漏问题;使用MAT查看内存占用问题。

3. UI优化