【问题标题】:How to stop asynctask in android when back button is pressed按下后退按钮时如何在android中停止异步任务
【发布时间】:2013-11-30 10:05:16
【问题描述】:

我有一个活动(比如 Avtivity A),它运行一个 asyncatsk 并显示一些结果,这些结果显示在另一个活动(活动 B)中。一切正常。当用户单击一个按钮时,该任务被触发,另一个活动(活动 B)与进度条一起显示。如果我在活动 B 中按下后退按钮(进度条仍然可见),我会转到活动 A。但一段时间后(任务完成时)活动 B 变为可见。

我希望在用户按下 Activity B 中的返回按钮时停止 asynctask(与 Activity A 相关联)。

请帮助我,感谢您的帮助

【问题讨论】:

  • 发布你的 AsyncTask onPostExecute() 方法
  • “我希望在用户按下 Activity B 中的返回按钮时停止 asynctask(与 Activity A 相关联)。” 不要这样做。而不是两个活动,而是使用带有两个片段的单个活动。使用第一个 Fragment 启动 AsyncTask(由 Activity 控制),并在启动时将第一个 Fragment 替换为同一 Activity 中的第二个。

标签: android android-asynctask android-activity


【解决方案1】:
MyAsyncTask myTask=null;
myTask = new MyAsyncTask();

用于执行任务

myTask.execute();

用于停止/取消任务

public void onBackPressed()
{

    myTask.cancel(true);
}

【讨论】:

  • 感谢您的信息。但是我可以从 Activity B 调用这个取消方法吗?我希望取消的 asynctask 来自 Activity A?
  • 是的,你可以。您可以在 Activity B 中创建该类的对象并根据需要使用...我已经发布了取消任务的代码...
  • 谢谢。只是为了澄清。我是否需要为 Activity A 或 Activity A 中的 asynctask 创建一个对象?你能给我一个代码示例吗
  • 你最好创建不同类的 Asynctask 并在你想要的任何地方调用它......
【解决方案2】:

如果您显示结果和进度条,并在活动 B 中处理取消,那么您可能应该在活动 B 中启动 AsyncTask。但我建议您等到 AsyncTask 完成,然后使用捆绑包中的数据启动活动 B。无论哪种情况,您都可以在一个活动中处理所有与 AsyncTask 相关的事情。尽量不要把所有事情都过度复杂化。只需实现一些 OnAsyncTaskFinishedListener() 即可:

在 AsyncTask 类中:

public interface OnMyAsyncTaskCompletedListener {
    void onMyAsyncTaskCompletedListener(MyResults results);
}

。 . .

@Override
protected void onPostExecute(MyResults results) {
    onMyAsyncTaskCompletedListener(results);
}

@Override
protected void onCancelled() {
    onMyAsyncTaskCompletedListener(null);
}

然后在您的 Activity 中实现 OnMyAsyncTaskCompletedListener 和

public void onServerRequestCompleted(MyResults results) {
    //Start activity passing results in Intent
}

最后,要取消跑步活动,你可以这样做:

@Override
public void onBackPressed() {
    mMyAsyncTask.cancel(true);
}

【讨论】:

    【解决方案3】:

    【讨论】:

    • 感谢您的信息。我可以从 Activity B 调用这个取消方法吗?我希望取消的异步任务来自 Activity A。
    【解决方案4】:

    Activity BonDestroy()方法中你应该调用asynTask.cancel(true)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-19
      相关资源
      最近更新 更多