我想了解发生内存泄漏的时间。例如,如果我在活动中运行此runnable,则将捕获所有活动的上下文,如果发生轮换,则活动将不会被释放,直到runnable终止。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
executors.diskIO().execute(new Runnable() {
@Override
public void run() {
//CODE HERE
});
}
});
}
}
假设我将runnable放在一个不在MainActivity内的单独文件中,并从活动中启动它。当发生旋转时,在这种情况下是否存在内存泄漏?我的意思是runnable在每次旋转中都能捕获数据吗?
public class A{
Data ....
public A() {}
functionB(){
executors.diskIO().execute(new Runnable() {
@Override
public void run() { }
});
});
}
}
答案 0 :(得分:2)
每当你创建一个内部类时,它都会保留外部类的引用。如果你的runnable在一个活动中,它将保留一个活动的实例,因此会导致内存泄漏,而如果你把它放在A类,它将保留A类的引用而不是你的活动
如果您不想访问封闭类的成员,最好使您的类保持静态,因为它不会包含封闭类的对象。