我正在进行一些后台工作,并在此期间显示一个DialogFrament。一旦我的工作完成并调用相关回调函数,我就会关闭对话框。但是当我这样做时,我会收到由于Android源代码中的NPE而导致的崩溃,位置在这里:
void dismissInternal(boolean allowStateLoss) {
if (mDialog != null) {
mDialog.dismiss();
mDialog = null;
}
mRemoved = true;
if (mBackStackId >= 0) {
getFragmentManager().popBackStack(mBackStackId,
FragmentManager.POP_BACK_STACK_INCLUSIVE);
mBackStackId = -1;
} else {
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.remove(this);
if (allowStateLoss) {
ft.commitAllowingStateLoss();
} else {
ft.commit();
}
}
}
具体来说,这是在这一行:FragmentTransaction ft = getFragmentManager().beginTransaction();
onPause
方法是否被调用?如果是这种情况,我会预计出现问题,并倾向于通过确保在onResume
被调用之前不执行关闭对话框等操作(通过实现此处列出的暂停处理程序方法或此处列出的处理处理程序消息的方法)来解决此类问题。 - PJL