Android发生内存泄漏的情况

时间:2018-05-27 00:07:34

标签: android memory-leaks

我想了解发生内存泄漏的时间。例如,如果我在活动中运行此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() { }
         });

    });

   }
 }

1 个答案:

答案 0 :(得分:2)

每当你创建一个内部类时,它都会保留外部类的引用。如果你的runnable在一个活动中,它将保留一个活动的实例,因此会导致内存泄漏,而如果你把它放在A类,它将保留A类的引用而不是你的活动

如果您不想访问封闭类的成员,最好使您的类保持静态,因为它不会包含封闭类的对象。