性能优化

1.内存抖动

在较短时间内,反复的发生内存增长的回收。【onDraw里面new对象】

2.内存泄漏

本该释放的对象,一直无法释放,最终导致程序可用的内存越来越少,甚至无内存可用(OOM).

3.内存泄漏的场景。

3.1.使用单例模式,由于单例对象一直持有Activity对象,即使当Activity销毁了,mActivity对象也没法被回收。

示例:
public class AppManagerXiangxue {
    private static AppManagerXiangxue instance;
    private Activity mActivity;
    private AppManagerXiangxue(Activity mActivity) {
        this.mActivity= mActivity;
    }
    public static AppManagerXiangxue getInstance(Activity mActivity) {
        if (instance != null) {
            instance = new AppManagerXiangxue(mActivity);
        }
        return instance;
    }
}

3.2.Handler|AsyncTask引起的内存泄漏.
原因:Handler是通过内部类来创建的,内部类持有外部类Activity的引用,也就是说Handler持有Activity的引用,当通过Handler发送延时Message的时候,因为Message中target就是Handler对象,也就是Message持有handler引用,而handle持有Activity引用,所以当我们关闭Activity的时候,activity的引用也是没有办法被回收。

3.3.资源对象未关闭引起的内存泄露。

  • Cursor,Socket在Activity销毁的时候,没有关闭。

3.4.EventBus或者广播在Activity销毁的时候,没有注销。

4.性能优化

4.1.布局优化
使用ConstraintLayout约束布局,减少嵌套,使用include复用,merge,ViewStub标签

4.2.绘制优化
onDraw里面不要创建新的局部变量,因为onDraw可能会被频繁调用,从而导致内存抖动,onDraw不要做耗时任务,否者会导致view绘制过程不流畅。

4.3.内存优化。【Android Profile 内存分析】
EventBus,File,Cursor,Brocast使用后,在onDestory需要注销.

4.4.线程优化.【Androd Profile 线程分析,看哪些线程占用的cpu时间较长】
使用线程池,可以复用核心线程池,减少频繁创建线程带来的性能开销。

4.5.启动速度优化.
任务异步加载处理

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

推荐阅读更多精彩内容