如何取消 AsyncTask 并使用新参数再次执行它?



我有一个具有MapView的应用程序。当用户缩放或平移MapView时,我执行AsyncTask的新实例以从服务器获取MapView的数据。

假设用户平移地图,我们触发异步任务来获取地图的数据,在获取所有数据并更新地图之前,用户再次移动地图,将触发第二个异步任务。如果第二个异步任务在第一个异步任务之前完成,它将更新 map,但在完成第一个异步任务后,mapview 将再次更新,并向用户显示错误的数据。

我想知道有没有办法停止(取消)正在运行的异步任务并执行另一个任务?如果是,如何?

您必须调用AsynTask上的cancel才能取消它。

这意味着如果您在控制处于doInBackGround(..)状态时取消了控制权,则控制权将不会进入onPostExecute(result)

您必须检查您的asynctask是否已取消。您可以isCancelled()

执行此操作看这里 : http://developer.android.com/reference/android/os/AsyncTask.html#cancel(布尔值)

看这里 : http://developer.android.com/reference/android/os/AsyncTask.html#isCancelled()

最新更新