请帮忙.我可以重新启动AsyncTask.每当第二次调用updatePoi()时,应用程序都会崩溃.
这是我的代码:
>我正在检查任务的状态并设置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(); }
解决方法:
一个AsyncTask实例只能被调用一次.要进行第二次呼叫,您需要创建一个新实例.
总结以上是内存溢出为你收集整理的android-无法停止/重新启动AsyncTask全部内容,希望文章能够帮你解决android-无法停止/重新启动AsyncTask所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)