【问题标题】:How to kill a Activity and the AsyncTask如何杀死 Activity 和 AsyncTask
【发布时间】:2015-02-08 11:57:38
【问题描述】:

我正在开发一个小游戏。当我按下后退按钮时,activity 将显示一个窗口取消游戏yes/no。

如果我按是,我会通过finish() 回到我的MainActivity。

我的问题是,我无法再次开始游戏,因为我的 Asynctask 尚未完成。我首先必须在“最近使用的应用程序”中杀死该应用程序。

【问题讨论】:

    标签: android android-activity android-asynctask


    【解决方案1】:

    您需要取消Activity的onStop中的AsyncTask。

    【讨论】:

      【解决方案2】:

      您需要实现两件事来停止 AsyncTask 的执行:

      1. 从您要停止执行的位置调用 AsyncTask 的 Cancel() 方法。这可能在您的 Activity 的 onStop() 中,如下所示:
      asyncTask.cancel(true);

      2. 现在您必须使用 doInBackground 方法中的 isCancelled 方法检查 AsyncTask 是否被取消。

      protected Object doInBackground(Object... x)  { 
      
         while (/* condition */)
         {
            ...
            if (isCancelled())  
               break;
         } 
         return null; 
      }
      

      为什么?由于 Android 文档对 AsyncTask 的以下描述:

      取消任务
      可以随时通过调用来取消任务 取消(布尔值)。调用此方法将导致后续调用 isCancelled() 返回真。调用此方法后, onCancelled(Object),而不是 onPostExecute(Object) 将被调用 在 doInBackground(Object[]) 返回之后。为了确保一个任务 尽快取消,您应该经常检查退货 isCancelled() 的值定期从 doInBackground(Object[]),如果 可能的(例如在循环内。)

      【讨论】:

        【解决方案3】:

        你可以参考这个link来取消你的异步任务

        【讨论】:

          【解决方案4】:

          我建议使用表面来编码实际的游戏部分而不是活动,这可能会帮助您解决这个问题。

          【讨论】:

          • 感谢您的建议。已经将它用于相机应用程序,但没有考虑将其用于游戏。
          【解决方案5】:

          在处理点击的代码中

          • 1> 调用 finish(),并在 onStop() 或 onDestroy() 上使用 AsyncTask.cancel() 方法。
          • 或2>使用AsyncTask.cancel(),在AsyncTask.onCancelled()方法中,调用finish()结束activity。

          1> 是常用的。

          【讨论】:

            猜你喜欢
            • 2018-04-09
            • 1970-01-01
            • 1970-01-01
            • 2015-09-03
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多