助けてください。AsyncTaskを再起動できます。updatePoi()を2回呼び出すと、アプリが毎回クラッシュします。
これが私のコードです:
タスクのステータスを確認し、cancel(true)を設定しています。
public void updatePoi() { //new RefreshMapTask().execute(); if (refreshMapTask.getStatus() == AsyncTask.Status.RUNNING || refreshMapTask.getStatus() == AsyncTask.Status.PENDING) { refreshMapTask.cancel(true); } refreshMapTask.execute(); } }
これが私のAsyncTaskです。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();
}