在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()
会出现内存泄漏吗?该类没有活动引用,但我意识到匿名类实际上是一个非静态内部类,因此拥有对外部类的引用。难道这本身就是内存泄漏?
它将保留对外部类(活动)的引用,直到任务完成。因此,这将使活动的举行时间超过绝对必要的时间。但是,如果任务在合理的时间内完成,那应该没问题-完成任务后,任务将结束并变为可垃圾回收,这将使活动垃圾可回收。更大的问题是长期线程,这些线程可能会持续到活动结束之后,或者如果编写得不好,则根本不会终止。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句