Android onSaveInstanceState()与OnRetainCustomOnConfiguration()的比较

Android onSaveInstanceState()与OnRetainCustomOnConfiguration()的比较,android,actionbarsherlock,parcelable,android-optionsmenu,android-configchanges,Android,Actionbarsherlock,Parcelable,Android Optionsmenu,Android Configchanges,我正在使用ActionBarSherlock,以及我根据程序状态动态管理的几个MenuItems。具体来说,我将MenuItem保存到Activity的oncreateoptions menu()方法中的实例变量中,然后可以根据需要在以后的Activity中显示和/或隐藏它们 但是,我发现MenuItem变量可能会在配置更改时丢失,例如设备旋转。因此,如果需要,我还将它们放入一个包中,并通过下一个onCreate()调用中的savedInstanceState机制将它们传递给onSaveInst

我正在使用ActionBarSherlock,以及我根据程序状态动态管理的几个
MenuItem
s。具体来说,我将
MenuItem
保存到
Activity
oncreateoptions menu()
方法中的实例变量中,然后可以根据需要在以后的
Activity
中显示和/或隐藏它们

但是,我发现
MenuItem
变量可能会在配置更改时丢失,例如设备旋转。因此,如果需要,我还将它们放入一个
包中,并通过下一个
onCreate()
调用中的
savedInstanceState
机制将它们传递给
onSaveInstanceState()
进行恢复

在设备旋转的情况下,这似乎可以正常工作。但是,如果按Home(主页)按钮,则会出现错误:

Unable to marshal value com.actionbarsherlock.internal.view.menu.MenuItemWrapper
你知道有什么不同吗,或者有什么建议可以解决吗?谢谢大家!

更新

我发现了一个简单的解决方案。通过重写此方法,可以在销毁
活动
时隐藏所选类的对象,然后使用
GetLastCustomNonfigurationInstance()
检索该对象。这似乎比摆弄
Parcelable
s等要简单得多,在我的例子中也是如此


但我仍然想知道:为什么我使用
onSaveInstanceState()得到上述错误?使用
onRetainCustomOnConfigurationInstance()
通常安全吗?或者是否存在任何问题?

生成错误的对象可能没有实现Parcelable。