内存泄漏

  • 在AndroidDemos项目中,在测试事件传递机制的ActivityEventDiaspatch类中,由于自定义的View和ViewGroup在被点击了以后会有一长串的Toast来打印(事件传递的过程用Toast打印出来),这一系列的Toast打印完毕需要的事件挺长的,而在此期间,如果如果按了返回键,就将导致内存泄露,因为Toast持有了该Activity,所以该Activity无法被垃圾回收器回收:
内存泄漏_第1张图片
image.png

解决方法:
使用getApplicationContext(),或者在自定义的Application类中:

public class MyApplication extends Application {
    private static Context context;
    @Override
    public void onCreate() {
        context = getApplicationContext();
    }
    public static Context getContext() {
        return context;
    }
  • BaseFragment持有一个静态的MyListener,ActivityNoteAndTools和ActivityComponentIntereact等只要包含了继承Basefragment的Fragment并且调用BaseFragment中的Mylistener方法,调用之后一旦退出activity,将会导致activity不能被回收:


    内存泄漏_第2张图片
    image.png
image.png

解决方法:
(1):将MyListener改为非静态
(2):


image.png

(3):传入Applicatin类中的全局context


内存泄漏_第3张图片
image.png

你可能感兴趣的:(内存泄漏)