我使用android AsyncTask<Params, Progress, Result>
如果执行期间没有例外:
@Override
protected Boolean doInBackground(Object[] params) {
// some methods here
}
是否有可能性以下代码可能无法执行:
@Override
protected void onPostExecute(Boolean o) {
//System.out.println("Hello");
}
在我的应用程序中,我在 SharedPreferences 中添加了布尔值( true ),我需要将其更改为 false 执行完成后。
我使用此值来检测此任务是否已在运行。出于某种原因,我无法使用 .isCancled() /*and|or */ .getStatus()
,因为我没有将引用存储到此任务中
答案 0 :(得分:2)
如果您是否存在以下代码可能无法执行的任何可能性:
onPostExecute()
cancel()
,则不会调用{p> AsyncTask
。当cancel()
不再需要时,您应该AsyncTask
并且可能会崩溃,例如当执行AsyncTask
的活动被销毁时。
此外,如果您的流程因任何原因终止,则不会调用onPostExecute()
。
在我的应用程序中,我在SharedPreferences中放置了一个布尔值(true),我需要在执行完成后将其更改为false。我使用此值来检测此任务是否已在运行。
这不是一个很好的选择。例如,如果您的流程在任务运行时终止,则SharedPreferences
会在您的应用下次启动时报告该任务正在运行。不要将持久性数据存储用于非持久性信息。
出于某种原因,我无法使用.isCancled()/ *和|或* /。getStatus(),因为我不存储对此任务的任何引用。
然后存储对任务的引用,例如来自保留的片段。