首页 文章

Android发生内存泄漏的情况

提问于
浏览
0

我想了解内存泄漏发生的时间 . 例如,如果我在活动中运行此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 回答

  • 2

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

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

相关问题