我有一个具有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()