Java AsyncTask是否在片段的onDestroy()和onCreate()回调之间传递任何响应?
我知道我来派对有点晚了,在过去的3年里(或者更长的时间),像这样的讨论已经有成千上万次了(不幸的是,大多数讨论都涉及活动而不是片段),但我对一件事很好奇 如果有以下代码段,当屏幕方向更改后调用AsyncTask的回调Java AsyncTask是否在片段的onDestroy()和onCreate()回调之间传递任何响应?,java,android,android-fragments,android-asynctask,android-orientation,Java,Android,Android Fragments,Android Asynctask,Android Orientation,我知道我来派对有点晚了,在过去的3年里(或者更长的时间),像这样的讨论已经有成千上万次了(不幸的是,大多数讨论都涉及活动而不是片段),但我对一件事很好奇 如果有以下代码段,当屏幕方向更改后调用AsyncTask的回调onError()或onSuccess()时,mFragment是否可以为null?因此,AsyncTask启动后,我旋转设备的屏幕,在某个点上AsyncTask将返回错误或成功。当这种情况发生时,MFFragment可以为null吗 我已经知道在处理活动时不会发生这种情况,因为在调
onError()
或onSuccess()
时,mFragment
是否可以为null?因此,AsyncTask启动后,我旋转设备的屏幕,在某个点上AsyncTask将返回错误或成功。当这种情况发生时,MFFragment可以为null吗
我已经知道在处理活动时不会发生这种情况,因为在调用前一个实例的onretainonconfigurationinstance()
和活动的新实例的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();
}
}
}
对于片段的
ondestory
和onCreate
,我不能100%确定。但是,可以保证在片段的onAttach
和onDetach
之间的主线程上不会运行任何其他内容。所以你可以考虑使用它来代替OnCube。