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