Java 尝试使用上下文时由于分离的片段而导致的IllegalStateException
我有一个片段,它有一个运行列表填充作业的Java 尝试使用上下文时由于分离的片段而导致的IllegalStateException,java,android,android-fragments,android-asynctask,illegalstateexception,Java,Android,Android Fragments,Android Asynctask,Illegalstateexception,我有一个片段,它有一个运行列表填充作业的AsyncTask。在AsyncTask.doInBackground()中,我使用方法getString()获取字符串。我已经在那里抛出过几次非法状态异常,但奇怪的是我在片段onDetach()中杀死了AsyncTask 我的AsyncTask代码大致如下: myTask = new AsyncTask<Void, Void, Void>(){ @Override protected void doInBackground()
AsyncTask
。在AsyncTask.doInBackground()
中,我使用方法getString()
获取字符串。我已经在那里抛出过几次非法状态异常,但奇怪的是我在片段onDetach()
中杀死了AsyncTask
我的AsyncTask代码大致如下:
myTask = new AsyncTask<Void, Void, Void>(){
@Override
protected void doInBackground(){
//code...
String message;
//code...
if(//some eval){
message = mContext.getString(R.string.Eval_true) <= Causes exception in rare cases
}
}
}
正如我所说,在150-200次运行期间,这种情况只发生了2-3次,但我仍然想找出在某些情况下,是什么导致片段分离上的任务取消不起作用
谢谢你的提示
-德累斯顿先生您是否检查异步任务是否被取消/使用可中断的代码(
抛出InterruptedException
)?Android不会神奇地杀死任务。任务必须检查是否应该停止。嗨,谢谢你的帮助。我正在使用isCancelled()
检查任务是否已终止,但不是在getString()
行之前。现在来看,当片段从活动中分离出来时,上下文将无效是有意义的。在那一行之前,我将执行另一个isCancelled()
调用,应该就是这样。
@Override
public void onDetach(){
if(myTask != null && myTask.getStatus() != AsyncTask.Status.FINISHED){
myTask.cancel(true);
}
super.onDetach();
}