据我所知,您的Android活动将针对任何方向更改的新方向重新创建。
是否有办法在方向更改时存储/保存原始方向的部分数据?
我想存储一些位图,所以我不必在方向更改时再次加载它。
答案 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
。这是通过兼容包向后兼容的。
答案 1 :(得分:5)
将项目保存在父活动或静态实用程序类中。
否则,您可以使用清单告诉应用程序不要破坏屏幕调整大小的活动。看看这篇文章:http://developer.android.com/guide/topics/resources/runtime-changes.html
答案 2 :(得分:1)
实际上Android Developer网站上有一篇非常好的文章,涵盖了这个主题。
某些设备(如T-Mobile G1)可以更换硬件 运行时配置。例如,当您打开键盘时, 屏幕从纵向更改为横向 取向。
为了让Android应用程序开发更容易,Android系统 自动处理配置更改事件并重新启动 使用新配置的当前活动。
[...]
虽然这种行为非常强大,但您的应用程序会适应 在运行时自动到设备的配置,它是 有时会让新的Android开发人员感到困惑,他们想知道为什 活动被破坏并重建。
面对这个“问题”,一些开发人员选择处理配置 改变自己,这通常是一个短期的解决方案 只会让他们的生活变得复杂。
[...]
答案 3 :(得分:0)
不会重新启动运行您的活动的流程。 Android框架只会创建您的活动的新实例。因此,作为最简单的解决方案,您可以将数据存储在静态变量中。
答案 4 :(得分:0)
您可以尝试使用共享偏好:
editor edit = preferences.edit();
edit.putString("username", "new_value_for_user");
edit.commit();