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();
}