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



在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()会有内存泄漏?类没有活动引用,但我意识到匿名类实际上是一个非静态内部类,因此持有对外部类的引用。那么,这本身是一个内存泄漏是真的吗?

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

最新更新