- 在AndroidDemos项目中,在测试事件传递机制的ActivityEventDiaspatch类中,由于自定义的View和ViewGroup在被点击了以后会有一长串的Toast来打印(事件传递的过程用Toast打印出来),这一系列的Toast打印完毕需要的事件挺长的,而在此期间,如果如果按了返回键,就将导致内存泄露,因为Toast持有了该Activity,所以该Activity无法被垃圾回收器回收:
![](https://img.haomeiwen.com/i3023663/f431ebdbacdb06da.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不能被回收:
image.png
![](https://img.haomeiwen.com/i3023663/54b9e420198566a9.png)
解决方法:
(1):将MyListener改为非静态
(2):
![](https://img.haomeiwen.com/i3023663/f321b0055d8636b5.png)
(3):传入Applicatin类中的全局context
![](https://img.haomeiwen.com/i3023663/e8e697b26ca69603.png)
网友评论