Android运行时改变的处理(Handling Runtime Changes)
来源:互联网 发布:windows自带一键还原 编辑:程序博客网 时间:2024/05/16 19:12
参考自:http://developer.android.com/guide/topics/resources/runtime-changes.html#top
设备的一些参数会在运行时改变,如屏幕方向、键盘弹出和语言更改。当这些改变发生时,Android会重启正在运行的Activity。为了合适地处理这个重启时间,一般需要在onSaveInstanceState()来保存应用状态的相关的数据,并在onRestoreInstaneState()里面回复应用的状态。
但是,如果你需要在重启时保存回复大量的数据时,上面的这个方法就不划算了。在这种情况下,Android提供了两种解决的方法:
1.在设置变化导致重启时,保留与状态相关的对象。
2.避免重启,自己处理这些设置的变化。
一. 在设置变化时保留状态相关对象。
需要两个步骤:
1.重载onRetainNonConfigurationIntance()方法,返回需要好留的对象实例(发生在onStop()和onDestroy()之间)。
2.在Activity重启时,调用getLastNonConfigurationInstance()获取保留的对象实例。
代码如下:
@Overridepublic Object onRetainNonConfigurationInstance() { final MyDataObject data = collectMyLoadedData(); return data;}注意:在返回数据对象实例时,不能返回与Context相关的Drawable,Adapter或View等,不然将会导致内存泄露
@Overridepublic void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final MyDataObject data = (MyDataObject) getLastNonConfigurationInstance(); if (data == null) { data = loadMyData(); } ...}二. 自己处理这些设置变换。
自己处理设置变换非常复杂,一般这是最后的选择。
为了声明将要自个处理这些设置变换,你需要在manifest文件中相应的<Activity>元素上添加上android:configChanges参数,例如下面所示:
<activity android:name=".MyActivity" android:configChanges="orientation|keyboardHidden" android:label="@string/app_name">然后,覆盖onConfigrationChanges()方法,并在其中处理设置变换。如下面代码所示
@Overridepublic void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); // Checks the orientation of the screen if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show(); } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){ Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show(); }}注意:上面的Configuration的实例包含有所有的设置,而不但只有改变后的设置
- Android运行时改变的处理(Handling Runtime Changes)
- Handling Runtime Changes(处理运行时变化)
- 处理运行时系统设置变化(Handling Runtime Changes)
- Android 资源之处理运行时更改(Handling Runtime Changes)
- Android应用资源---处理运行时改变(Handing Runtime Changes)
- Android应用资源---处理运行时改变(Handing Runtime Changes)
- Android Handling Runtime Changes
- Android Handling Runtime Changes
- Android Developer : Handling Runtime Changes
- Handling runtime changes(二)自己处理Configuration change
- Android---Handling Runtime Changes
- 006_Handling Runtime Changes处理运行时配置改变 翻译学习
- Handling Runtime Changes(retain Fragment)
- Handling Runtime Changes
- Handling Runtime Changes
- Handling Runtime Changes
- Handling Runtime Changes
- Android 开发指南 翻译7 Application Resources: Handling Runtime Changes(未完...)
- javascript 在firebug调试时用console.log的方法
- Android中如何获取应用版本号
- REST是什么(转)
- 浅析linux开发工具adb具体实现
- Java,Oracle,MySQL数据设计数据类型参考
- Android运行时改变的处理(Handling Runtime Changes)
- .net中DataSet复制整行
- Android Wifi的工作流程
- 搜狗面试注意事项
- linux获取cpu id和disk id
- linux大端,小端,网络字节序转换之可移植性代码
- .net中文件下载
- 百度,360,淘宝,腾讯,高通中国,htc上海 Android 面试题
- openwrt mysql 安装