Android中旋转屏幕时如何保存一些数据

5
据我所知,当设备发生任何方向变化时,您的Android活动将重新创建。
有没有一种方法可以在方向改变时存储/保存原始方向中的一些数据?
我想要存储一些位图,这样我就不必在方向改变时重新加载它们。
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.x.x及以下,你可以使用该方法。否则,谷歌建议你使用Fragment.setRetainInstance。这个方法是通过兼容包向后兼容的。 Fragment.setRetainInstance

@Pedro Loureiro 但是这只适用于Fragment,对吧? - David Doria

5

非常感谢,这对我帮助很大,我现在认为我可以解决我的问题 :-) 几分钟后我会将此标记为已回答。 - Michell Bak

1
实际上,在Android开发者网站上有一篇非常好的文章涵盖了这个主题。
一些设备,如T-Mobile G1,在运行时可以更改其硬件配置。例如,当您打开键盘时,屏幕会从纵向方向更改为横向方向。
为了使Android应用程序开发更加容易,Android系统自动处理配置更改事件,并使用新配置重新启动当前活动。
虽然这种行为非常强大,因为您的应用程序会自动适应运行时设备的配置,但对于新的Android开发人员来说,有时会感到困惑,他们想知道为什么他们的活动被销毁并重新创建。
面对这个“问题”,一些开发人员选择自己处理配置更改,这通常是一个短期解决方案,以后只会让他们的生活更加复杂。 完整文章

0

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


所以,我基本上可以将变量定义为静态的,并将它们初始化为空。然后,进行空值检查,如果它们不是空的,我将重新使用它们,如果它们是空的,我将加载它们。正确吗? - Michell Bak
1
小心静态变量的存储;你可能会对 Romain Guy 的这篇非常有趣的文章感兴趣:http://www.curious-creature.org/2008/12/18/avoid-memory-leaks-on-android/ - darma

0
你可以尝试使用SharedPreferences: Editor edit = preferences.edit(); edit.putString("username", "new_value_for_user"); edit.commit();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接