android匿名asyncTask - 它会导致内存泄漏

时间:2016-09-22 14:56:08

标签: java android memory-leaks

在android中我试图防止内存泄漏。我继承了一些遗留代码,开发人员在其中创建asyncTask作为匿名内部类,如下所示:

 void startAsyncTask() {
    new AsyncTask<Void, Void, Void>() {
        @Override protected Void doInBackground(Void... params) {
            while(true);//loop  to keep thread alive forever.
        }
    }.execute();
}

所以我在这个例子中使用一个循环只是为了让孩子线程永远活着,所以我可以演示我的观点。 所以,如果我打电话给startAsyncTask(),活动会有内存泄漏吗?该类没有活动引用,但我意识到匿名类实际上是一个非静态内部类,因此拥有对外部类的引用。那么这本身就是内存泄漏吗?

1 个答案:

答案 0 :(得分:4)

它将持有对外部类(Activity)的引用,直到任务完成。因此,它将导致活动持续时间超过绝对必要的时间。但是,如果任务在合理的时间内完成,那应该没问题 - 完成后任务将结束并变为垃圾收集,这将使活动垃圾收集。更大的问题是长期线程可以持续到活动结束,或者如果写得不好就不会终止。