在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(),会有内存泄漏吗?该类没有活动引用,但我意识到匿名类实际上是一个非静态的内部类,因此包含对外部类的引用。那么,这本身就是一个内存泄漏,这是真的吗?
发布于 2016-09-22 14:59:21
它将保存对外部类(活动)的引用,直到任务完成。因此,它将导致活动举行的时间超过绝对必要。但是,如果任务在合理的时间内完成,这应该是可以的--在任务完成后,任务将结束,成为垃圾回收,这将使活动成为垃圾回收。更大的关注是长期线程,这些线程可以持续到活动结束后,如果编写得不好,则根本不终止。
https://stackoverflow.com/questions/39642438
复制相似问题