Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.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中保存一些关于方向改变的数据_Android_Device Orientation_Orientation Changes - Fatal编程技术网

在Android中保存一些关于方向改变的数据

在Android中保存一些关于方向改变的数据,android,device-orientation,orientation-changes,Android,Device Orientation,Orientation Changes,据我所知,在任何方向更改时,您的Android活动都将为新方向重新创建 有没有办法在方向更改时存储/保存原始方向的部分数据 我想存储一些位图,这样我就不必在方向更改时再次加载它。运行活动的进程将不会重新启动。Android框架将创建一个新的活动实例。因此,作为最简单的解决方案,您可以将数据存储在静态变量中。将项目保存在父活动或静态实用程序类中 否则,您可以使用清单告诉应用程序不要在屏幕调整大小时销毁活动。查看这篇文章:实际上,Android开发者网站上有一篇很好的文章介绍了这个主题 一些设备,如

据我所知,在任何方向更改时,您的Android活动都将为新方向重新创建

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


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

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

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


否则,您可以使用清单告诉应用程序不要在屏幕调整大小时销毁活动。查看这篇文章:

实际上,Android开发者网站上有一篇很好的文章介绍了这个主题

一些设备,如T-Mobile G1,可以更改其硬件 运行时的配置。例如,当你打开键盘时, 屏幕从纵向转向横向 方向

为了简化Android应用程序的开发,Android系统 自动处理配置更改事件并重新启动 具有新配置的当前活动

[……]

虽然这种行为非常强大,但因为您的应用程序能够适应 在运行时自动切换到设备的配置,它是 有时会让新安卓开发者感到困惑,他们想知道为什么他们的 活动被销毁并重新创建

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

[……]


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


我一直在使用
Activity.onRetainNonConfigurationInstance
,但我刚刚发现这是不推荐的(可能是从honeycomb或更高版本开始)。

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

伪代码中的示例用法如下:

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
。这是通过compability软件包向后兼容的


您可以尝试使用SharedReference:

editor edit=preferences.edit();
edit.putString(“用户名”,“用户的新值”);

edit.commit()

因此,我基本上可以创建静态变量,并将其初始化为null。然后,进行空检查,如果它们不是空的,我将重用它们,如果它们是空的,我将加载它们。正确吗?注意静态变量的存储;你可能会读到Romain Guy写的这篇非常有趣的文章:非常感谢,这对我帮助很大,我想我现在可以解决我的问题了:-)我会在几分钟后把这个标记为已回答。@Pedro Loureiro但这不适用于活动,只适用于一个片段,对吗?