onSaveInstanceState()与onRetainCustomNonConfigurationInstance()

时间:2013-04-01 18:19:42

标签: android actionbarsherlock parcelable android-optionsmenu android-configchanges

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

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

在设备轮换的情况下,这似乎工作正常。但是,如果我按下主页按钮,则会出现错误:

onCreate()

知道有什么区别,或建议如何解决?谢谢!

更新

我使用onRetainCustomNonConfigurationInstance()找到了一个简单的解决方案。通过重写此方法,您可以在销毁Unable to marshal value com.actionbarsherlock.internal.view.menu.MenuItemWrapper 时隐藏所选类的对象,然后使用Activity检索它。这似乎比弄乱getLastCustomNonConfigurationInstance()等更简单,并且它适用于我的情况。

但我仍然想知道:为什么我使用Parcelable会收到上述错误?使用onSaveInstanceState()一般是安全的,还是有任何陷阱?

0 个答案:

没有答案