在android中,我试图防止内存泄漏.我继承了一些旧代码,开发人员在其中创建了asyncTask作为匿名内部类,如下所示:
void startAsyncTask() {
new AsyncTask() {
@Override protected Void doInBackground(Void... params) {
while(true);//loop to keep thread alive forever.
}
}.execute();
}
所以我在这个例子中使用循环只是为了让子线程永远活着,这样我就可以演示我的观点.
所以从活动中,如果我调用startAsyncTask()会发生内存泄漏吗?该类没有活动引用,但我意识到匿名类实际上是一个非静态内部类,因此拥有对外部类的引用.真的这本身就是内存泄漏吗?
解决方法:
它将保留对外部类(活动)的引用,直到任务完成.因此,这将使活动的举行时间超过绝对必要的时间.但是,如果任务在合理的时间内完成,那应该没问题-完成任务后,任务将结束并变为可垃圾回收,这将使Activity可以被垃圾回收.更大的问题是长期线程,这些线程可以持续到活动结束之后,或者如果编写得不好,则根本不会终止.
标签:memory-leaks,java,android
来源: https://codeday.me/bug/20191026/1938234.html