我将onPause
方法的数据保存到SQLite
数据库。
myObject.saveEntry(data)
。 AsyncTask.execute(new Runnable(){})
savedSuccess(message)
Activity
方法showMessage(message)
称为我怀疑如何处理方向变化。当方向改变时,
onPause
并调用saveEntry
方法。onDestroy
savedSuccess(message)
方法回调(从前一个Activity实例调用)showMessage(message)
并显示toast 我的问题是
AsyncTask
方法执行onDestroy
答案 0 :(得分:2)
活动中的AsyncTask可能不是运行后台任务的最佳解决方案,因为它包含对活动的引用,该活动现在已被销毁。
您可以考虑使用带有setRetainInstance(true)的Fragment来使用AsyncTask或IntentService进行后台工作。
请参阅here了解如何使用任务片段进行后台工作。
答案 1 :(得分:1)
如果将AsyncTask
放入保留的片段中,则Service
可以保留方向更改。见Handling Configuration Changes with Fragments。如果您希望任务在活动完成或进入后台堆栈时生存,请将其放入cv.h
。
答案 2 :(得分:1)
您所看到的是内存泄漏 - AsyncTask保留对其声明的Activity的引用,并阻止Android运行时垃圾收集它。回答你的问题:
无法使用命令停止AsyncTask。您可以请求在onDestroy()中取消它,但它仍然只在执行了doInBackground()方法后执行,在您的情况下将是Runnable。
您可以选择使用静态嵌套的AsyncTask,它不会保存对它所驻留的Activity的引用 - 需要注意的是,您将无法引用Activity中的任何内容,但不应该对你的案子来说是个大问题。