Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.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 savedInstanceState_Android_Android Fragments_Savestate - Fatal编程技术网

损坏的Android savedInstanceState

损坏的Android savedInstanceState,android,android-fragments,savestate,Android,Android Fragments,Savestate,场景是这样的,我的Android应用程序被用户点击主页按钮、接听来电、点击通知等放置在后台。因此,他们查看Facebook,播放沥青8,任何可能导致Android操作系统发现它需要更多内存并杀死我的Android应用程序的东西。用户决定要查看我的应用程序,点击图标并点击链接 当应用程序在被操作系统终止后启动时,主活动会被传递一个savedInstanceState,其中包含两个键:android:viewHierarchyState和android:support:fragments。此save

场景是这样的,我的Android应用程序被用户点击主页按钮、接听来电、点击通知等放置在后台。因此,他们查看Facebook,播放沥青8,任何可能导致Android操作系统发现它需要更多内存并杀死我的Android应用程序的东西。用户决定要查看我的应用程序,点击图标并点击链接

当应用程序在被操作系统终止后启动时,主活动会被传递一个savedInstanceState,其中包含两个键:android:viewHierarchyState和android:support:fragments。此savedInstanceState被传递给片段并崩溃,说明片段未创建视图:

Caused by: java.lang.IllegalStateException: Fragment com.foo.SomeFragment did not create a view.
  at android.support.v4.app.FragmentManagerImpl.onCreateView(FragmentManager.java:2200)
  at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:300)
  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:727)
  at android.view.LayoutInflater.rInflate(LayoutInflater.java:806) 
  at android.view.LayoutInflater.inflate(LayoutInflater.java:504)
  at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
  at android.view.LayoutInflater.inflate(LayoutInflater.java:365)
  at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:404)
  at android.app.Activity.setContentView(Activity.java:2156)
  at com.foo.NavigationPage.onCreate(NavigationPage.java:774)
  at android.app.Activity.performCreate(Activity.java:5958)
  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1129)
  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2364)
  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2474)
  at android.app.ActivityThread.access$800(ActivityThread.java:144) 
  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1359)
....
因此,操作系统正在使用它在关闭应用程序时写入的数据savedInstanceState,但由于某种原因,当应用程序在启动时使用它创建自身时,它已损坏

我已尝试在NavigationPage活动中执行此操作:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(null)
}
这对移动应用程序启动有效,但如果你的移动应用程序进入后台,你点击图标,你希望它回到你离开的地方。传递null会导致应用程序经历所有的屏幕构建/加载过程,这非常耗时,而不是我们想要的用户体验


关于可能发生的事情或我如何避免这种情况,有什么想法吗?

这里已经回答了这个问题:

它的字面意思是:

您需要扭转这种局面:

setContentView(R.layout.main_activity); 
super.onCreate(savedInstanceState). 
为此:

super.onCreate(savedInstanceState). 
setContentView(R.layout.main_activity);
在活动的
onCreate


对不起,我应该提到我看过这个问题,在我的导航页面中,代码是:super.onCreate(savedInstanceState);setContentView(R.layout.navigation);我也毫不高兴地看了这篇文章:那么
onSaveInstanceState
方法呢?也许它还保存了一个空值?不,我通过调试转储了包,请参见:08-25 17:15:38.205 22849-22849/?D/com.foo.NavigationPage﹕ android:viewHierarchyState是捆绑包08-25 17:15:38.205 22849-22849/?D/com.foo.NavigationPage﹕ 键[0],值[android.view.AbsSavedState]$1@483fabc] 08-25 17:15:38.205 22849-22849/? D/com.foo..导航页面﹕ 键[1],值[android.view.AbsSavedState]$1@483fabc] 08-25 17:15:38.205 22849-22849/? D/com.foo..导航页面﹕ 键[2],值[android.view.AbsSavedState]$1@483fabc] ...