5

据我了解,您的 Android 活动将在任何方向更改时为新方向重新创建。

有没有办法在方向改变时存储/保存原始方向的一些数据?

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

4

5 回答 5

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.xx,您可以使用该方法。否则,谷歌建议您使用Fragment.setRetainInstance. 这是通过兼容性包向后兼容的。

Fragment.setRetainInstance

于 2011-08-23T21:37:33.080 回答
5

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

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

于 2011-08-23T21:28:17.077 回答
1

实际上,Android 开发者网站上有一篇非常不错的文章涵盖了这个主题。

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

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

[...]

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

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

[...]

全文

于 2011-08-23T21:31:50.320 回答
0

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

于 2011-08-23T21:26:49.197 回答
0

您可以尝试使用共享首选项:

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

于 2013-05-23T06:55:01.037 回答