Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 为什么在销毁活动时为视图调用onRestoreInstanceState?_Android - Fatal编程技术网

Android 为什么在销毁活动时为视图调用onRestoreInstanceState?

Android 为什么在销毁活动时为视图调用onRestoreInstanceState?,android,Android,在下面的stacktrace中,您可以注意到,由于活动被销毁,视图的onRestoreInstanceState被调用。为什么这是必要的 at com.mypackage.MyView.onRestoreInstanceState(Unknown Source) at android.view.View.dispatchRestoreInstanceState(View.java:13758) at android.view.ViewGroup.dispatchResto

在下面的stacktrace中,您可以注意到,由于活动被销毁,视图的onRestoreInstanceState被调用。为什么这是必要的

    at com.mypackage.MyView.onRestoreInstanceState(Unknown Source)
    at android.view.View.dispatchRestoreInstanceState(View.java:13758)
    at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2889)
    at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2895)
    at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2895)
    at android.view.View.restoreHierarchyState(View.java:13736)
    at android.support.v4.app.Fragment.restoreViewState(Unknown Source)
    at android.support.v4.app.FragmentManagerImpl.moveToState(Unknown Source)
    at android.support.v4.app.FragmentManagerImpl.moveToState(Unknown Source)
    at android.support.v4.app.FragmentManagerImpl.moveToState(Unknown Source)
    at android.support.v4.app.FragmentManagerImpl.dispatchReallyStop(Unknown Source)
    at android.support.v4.app.FragmentActivity.onReallyStop(Unknown Source)
    at android.support.v4.app.FragmentActivity.doReallyStop(Unknown Source)
    at android.support.v4.app.FragmentActivity.onDestroy(Unknown Source)
    at android.support.v7.app.o.onDestroy(Unknown Source)
    at android.app.Activity.performDestroy(Activity.java:6189)
    at android.app.Instrumentation.callActivityOnDestroy(Instrumentation.java:1164)
    at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3778)
    ... 10 more
编辑


生产出来的任何东西都会被接收。onSaveInstanceState的文档中说:“钩子允许视图生成其内部状态的表示,以后可以使用它来创建具有相同状态的新实例。”-执行onDestroy时,不需要重新创建视图,那么为什么要调用onRestoreInstanceState呢

您的片段的
onRestoreInstanceState
作为您的活动的
onDestroy
的一部分发生

这是
FragmentManagerImpl
中的行为:

void moveToState(Fragment f, int newState, int transit, int transitionStyle, boolean keepActive) {
    //...
    case Fragment.CREATED:
    if (newState > Fragment.CREATED) {
    //...
        f.performActivityCreated(f.mSavedFragmentState);
        if (f.mView != null) {
            f.restoreViewState(f.mSavedFragmentState);
        }
        f.mSavedFragmentState = null;
    }
}
如果片段的状态已更改(移动),并且片段的视图不为null,则始终在此过程中调用restoreViewState


也许你不是在调用
super.onDestroy()
作为
onDestroy
中的第一条语句?

我想问题应该是:片段销毁后为什么
savedInstanceState
不是
null

你使用的安卓版本是什么?例外情况是什么?例外情况与此无关。安卓版本是从安卓4.0.3到安卓5.1。根据Google Play开发者控制台,这个特别的版本来自:Moto X(gen2)(victara)。你的compileSdkVersion是什么?compileSdkVersion=22 in build.gradle。我是说异常与此无关,因为它是自定义视图的onRestoreInstanceState中自定义代码中的NPE-我现在修复了它,异常不再出现。view.onRestoreInstanceState接收生成的任何view.onSaveInstanceState。onSaveInstanceState的文档中说:“钩子允许视图生成其内部状态的表示,该表示稍后可用于创建具有相同状态的新实例。”-执行onDestroy时,无需重新创建视图,那么为什么调用view.onRestoreInstanceState呢?请您在回答中详细说明,谢谢!您的问题是什么?可能您没有调用
super.ondestory()
作为
ondestory
中的第一条语句?您从堆栈跟踪中删除了哪一行?请编辑您的问题以包含整个跟踪。