保存Android中方向更改的一些数据

时间:2011-08-23 21:23:05

标签: android device-orientation orientation-changes

据我所知,您的Android活动将针对任何方向更改的新方向重新创建。

是否有办法在方向更改时存储/保存原始方向的部分数据?

我想存储一些位图,所以我不必在方向更改时再次加载它。

5 个答案:

答案 0 :(得分:12)

在可维护性和调试方面,使用静态变量/类是一种糟糕的方法。


我一直在使用Activity.onRetainNonConfigurationInstance,但我刚才发现这已被弃用(可能是因为蜂窝或以后)。 Activity.onRetainNonConfigurationInstance

使用此方法,只需调用Activity.getLastNonConfigurationInstance即可检索您在onRetainNonConfigurationInstance中返回的同一对象。一定要检查null并转换到正确的类(你可以返回/获取任何类)。 Activity.getLastNonConfigurationInstance

伪代码中的示例用法是:

onRetainNonConfigurationInstance:
    return "I need to remember this next time";

onCreate:
    ...
    String messageToShow = null;
    Object data = getLastNonConfigurationInstance();
    if(data != null)
        messageToShow = (String)data;
    else
        messageToShow = "Nothing to show";

因此,如果您的目标是2.x.x,则可以使用该方法。否则,Google建议您使用Fragment.setRetainInstance。这是通过兼容包向后兼容的。

Fragment.setRetainInstance

答案 1 :(得分:5)

将项目保存在父活动或静态实用程序类中。

否则,您可以使用清单告诉应用程序不要破坏屏幕调整大小的活动。看看这篇文章:http://developer.android.com/guide/topics/resources/runtime-changes.html

答案 2 :(得分:1)

实际上Android Developer网站上有一篇非常好的文章,涵盖了这个主题。

  

某些设备(如T-Mobile G1)可以更换硬件   运行时配置。例如,当您打开键盘时,   屏幕从纵向更改为横向   取向。

     

为了让Android应用程序开发更容易,Android系统   自动处理配置更改事件并重新启动   使用新配置的当前活动。

     

[...]

     

虽然这种行为非常强大,但您的应用程序会适应   在运行时自动到设备的配置,它是   有时会让新的Android开发人员感到困惑,他们想知道为什   活动被破坏并重建。

     

面对这个“问题”,一些开发人员选择处理配置   改变自己,这通常是一个短期的解决方案   只会让他们的生活变得复杂。

     

[...]

The full article

答案 3 :(得分:0)

不会重新启动运行您的活动的流程。 Android框架只会创建您的活动的新实例。因此,作为最简单的解决方案,您可以将数据存储在静态变量中。

答案 4 :(得分:0)

您可以尝试使用共享偏好:

editor edit = preferences.edit(); edit.putString("username", "new_value_for_user"); edit.commit();

相关问题