【发布时间】:2018-01-10 07:56:09
【问题描述】:
我使用AsyncTask 从本地数据库(sqlite)更新列表,如下所示:
@Override
public void onResume() {
super.onResume();
new MyAsynctask().execute();
}
我需要清楚地解释每次执行新的 MyAsynctask 时会发生什么,之前创建的前一个 MyAsynctask 会发生什么,以及这种方式是否会占用更多内存?
【问题讨论】:
-
问题是:每次在您的活动中调用 onResume 时,都会创建并执行一个新的 MyAsynctask。巨大的内存泄漏:o。你必须自己停止它并重新创建它!
-
请告诉我停止 MyAsynctask 并重新创建它的最佳做法
-
@ReneFerrari 你怎么判断这是一个(巨大的)内存泄漏?一旦异步任务结束,它就会被清理
-
我认为他的意思是
OutOfMemory而不是内存泄漏。 -
对我来说内存泄漏定义为您没想到的东西仍在运行并消耗内存。您的问题是,如果 onResume() 被多次调用,则许多 AsyncTask 并行运行。因此,内存消耗会增加很多,并且正如 Enzokie 提到的那样会导致 OutOfMemory。 ADM 已经写了一个答案,解释了如何避免这种情况:)
标签: java android multithreading android-asynctask