您intereset在asyncTask.cancel(true)
,在其实际参数传递true,如文档住宿:
mayInterruptIfRunning真,如果执行此任务的线程应该被中断;否则,正在进行的任务被允许完成。
那么你AsyncTask.doInBackground里面你可以try/catch语句如下 - 但是这需要你有阻断抛出InterruptedException电话,否则,你需要经常检查isCancelled()时间:
@Override
protected Void doInBackground(Void... params) {
try {
/// do work,
} catch (InterruptedException e) {
if (isCancelled()) {
// cancel(true) called, dont touch UI!
}
}
return null;
}
此外,它的安全检查是在onPostExecute()
开始isCancelled()。
当它达到onPostExecute并希望与UI交互
,它崩溃
这就是另外一个问题,如果你的内心AsyncTask
与GUI交互,我建议首先:使你的AsyncTask一个静态类,将对Activity或Fragment的引用传递给AsyncTask构造函数,然后将其存储为WeakReference<MyActivity> actRef
。那么当你需要它时使用if(actRef.get()!= null){//使用它。 }。通过这种方式,您需要泄漏对您的活动/片段的引用或使用无效的UI对象。
使用'myAsynTask.cancel(真);' – KOTIOS 2014-10-06 12:35:00
他已经这样做了。这个问题不是重复的。 – konmik 2014-10-07 07:41:05