请帮忙。我可以重新启动 AsyncTask。当第二次调用 updatePoi() 时,应用程序每次都会崩溃。
这是我的代码:
我正在检查任务的状态并设置取消(真)。
public void updatePoi() { //new RefreshMapTask().execute(); if (refreshMapTask.getStatus() == AsyncTask.Status.RUNNING || refreshMapTask.getStatus() == AsyncTask.Status.PENDING) { refreshMapTask.cancel(true); } refreshMapTask.execute(); } }
这是我的异步任务。在 doInBackground 我写了一个休息。
private class RefreshMapTask extends AsyncTask<Void, Void, Void> { @Override protected void onPreExecute() { super.onPreExecute(); getMapView().getOverlays().clear(); myPoiOverlay.clear(); exitOverlay.clear(); } @Override protected Void doInBackground(Void... voids) { Application app = (Application)getApplication(); Log.d(TAG, "exits count = " + app.getExits().size()); GeoPoint pointToNavigate = null; for (Exit exit : app.getExits()) { for (Poi poi : exit.getPoi()) { if (isCancelled()){ break; } //some code here } } //small code here return null; } @Override protected void onPostExecute(Void aVoid) { getMapView().invalidate(); } }
编辑:将评论中的解决方案添加到问题中
public void updatePoi() {
//new RefreshMapTask().execute();
if (refreshMapTask.getStatus() == AsyncTask.Status.RUNNING ||
refreshMapTask.getStatus() == AsyncTask.Status.PENDING){
refreshMapTask.cancel(true);
refreshMapTask = new RefreshMapTask();
} else {
refreshMapTask = new RefreshMapTask();
}
refreshMapTask.execute();
}