AsyncTask

时间:2015-08-09 18:04:12

标签: android android-asynctask

我使用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(),因为我没有将引用存储到此任务中

1 个答案:

答案 0 :(得分:2)

  

是否存在以下代码可能无法执行的任何可能性:

如果您onPostExecute() cancel(),则不会调用{p> AsyncTask。当cancel()不再需要时,您应该AsyncTask并且可能会崩溃,例如当执行AsyncTask的活动被销毁时。

此外,如果您的流程因任何原因终止,则不会调用onPostExecute()

  

在我的应用程序中,我在SharedPreferences中放置了一个布尔值(true),我需要在执行完成后将其更改为false。我使用此值来检测此任务是否已在运行。

这不是一个很好的选择。例如,如果您的流程在任务运行时终止,则SharedPreferences会在您的应用下次启动时报告该任务正在运行。不要将持久性数据存储用于非持久性信息。

  

出于某种原因,我无法使用.isCancled()/ *和|或* /。getStatus(),因为我不存储对此任务的任何引用。

然后存储对任务的引用,例如来自保留的片段。