AsyncTask是否在片段的onDestroy()和onCreate()回调之间提供任何响应?

时间:2014-06-13 15:01:06

标签: java android android-fragments android-asynctask android-orientation

我知道我来参加派对有点太晚了,在过去的3年里(或者更长的时间),有成千上万的讨论像这样(不幸的是大多数涉及活动而不是片段) ,但我对一件事感到好奇。

拥有以下代码,在屏幕方向更改后调用AsyncTask的回调mFragmentonError()时,onSuccess()是否为空?所以AsyncTask启动,我旋转设备的屏幕,在某些时候AsyncTask将返回错误或成功。发生这种情况时,mFragment可以为null吗?

我已经知道在处理活动时不会发生这种情况,因为在调用前一个实例的onRetainNonConfigurationInstance()和活动的新实例onCreate()之间基本上不会处理任何消息。 不幸的是,当涉及片段时,我无法找到关于此规则的任何内容。

你们对此有何了解?

感谢您的回答!

public class Fragment extends Fragment {
   private WorkerFragment mWorkerFragment;

   @Override
   public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      mWorkerFragment =(WorkerFragment)getFragmentManager().findFragmentByTag("worker_fragment");
      if (mWorkerFragment == null) {
         mWorkerFragment = new WorkerFragment();
         getFragmentManager().beginTransaction().add(mWorkerFragment, "worker_fragment").commit();
      }
      if (savedInstanceState == null) {
         mWorkerFragment.performAsyncTask();
      }

   private static class WorkerFragment extends Fragment {
      private TypeOfAsyncTask mAsyncTask;
      private Fragment mFragment;
      private Callback mCallback = new Callback() {

         @Override
         public void onError(Error error) {
            // Can mFragment be null here?
            mFragment.onSendRequestError(error);
         }

         @Override
         public void onSuccess(Result result) {
            // Can mFragment be null here?
            mFragment.onSendRequestSuccess(result);
         }
      };

      @Override
      public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setRetainInstance(true);
      }

      @Override
      public void onActivityCreated(Bundle savedInstanceState) {
         super.onActivityCreated(savedInstanceState);
         mFragment = (Fragment) getTargetFragment();
      }

      @Override
      public void onDetach() {
         super.onDetach();
         mFragment = null;
      }

      private void performAsyncTask() {
         mAsyncTask = new TypeOfAsyncTask(mCallback);
         mAsyncTask.execute();
      }
   }
}

0 个答案:

没有答案