我知道我来参加派对有点太晚了,在过去的3年里(或者更长的时间),有成千上万的讨论像这样(不幸的是大多数涉及活动而不是片段) ,但我对一件事感到好奇。
拥有以下代码,在屏幕方向更改后调用AsyncTask的回调mFragment
或onError()
时,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();
}
}
}