blog.csdn.net/lighthouse666/article/details/70230614
内存优化网络摘抄与总结:
    1.内存泄漏
        ①.单例模式引发的内存泄漏   
        长生命周期对象(static修饰)引用了短生命周期对象导致。
        解决方法:context 改为ApplicationContext。
        ②.集合操作不当引发内存泄漏
        集合存在添加元素的方法,没有相应的删除机制。导致集合所占内存只增不减。
        解决方法:删除元素,清空元素
        ③.线程操作不当引发内存泄露
        在主线程中使用new Thread.start  导致内存泄漏,
        使用静态内部类实现Runnable .start  没有泄漏
        ④.匿名内部类/非静态内部类操作不当引发的内存泄露
        内部类持有对象引用,无法释放
        静态内部类不再持有外部类的引用
        ⑤.资源未关闭引发的内存泄漏
        BraodcastReceiver  注册,反注册。
        Sql语句优化,条件查找,精确查找。Cursor关闭。
        File Io流关闭,Bitmap关闭。属性动画关闭。
        ⑥.Handler使用不当
        Handler持有Activity的引用,其发送的Message中含有Handler的引用,当队列处理Message时间过长会导致Handler无法被回收
        静态实例+弱引用(Weakrefrence)方式销毁对象时候清空队列里的Message
        private static class MyHandler extends Handler {         
                private final WeakReference<HandlerActivity2> mActivity;          
                public MyHandler(HandlerActivity2 activity) {  
                        mActivity = new WeakReference<HandlerActivity2>(activity);              
                    }          
                    @Override     
                public void handleMessage(Message msg) {      
                if (mActivity.get() == null) {                  
                    return;              
                }              
                mActivity.get().todo();     
                }   
                    @Override    
                    public void onDestroy() {  
                    //  If null, all callbacks and messages will be removed.       
                    mHandler.removeCallbacksAndMessages(null);
                    }
                }
    2.内存溢出
        1.内存泄漏长时间积累
        2.业务操作使用超大内存
        优化:
        1.调整图像大小后再放入内存、及时回收
        2.不要过多的创建静态变量

    3.内存优化工具
        Square:LeakCanary.

单例写法:

public class AppManager {
private static AppManager instance;
private Context context;
private AppManager() {
this.context = MyApplication.getContext();// 使用Application 的context
}
public static AppManager getInstance() {
if (instance == null) {
instance = new AppManager();
}
return instance;
}

 

本文地址:https://blog.csdn.net/FlyPig_Vip/article/details/79535242