处理运行时变更
来源:互联网 发布:淘宝小号哪里买安全 编辑:程序博客网 时间:2024/04/29 11:25
在配置变更期间保留对象
如果重启 Activity 需要恢复大量数据、重新建立网络连接或执行其他密集操作,那么因配置变更而引起的完全重启可能会给用户留下应用运行缓慢的体验。 此外,依靠系统通过onSaveInstanceState() 回调为您保存的 Bundle,可能无法完全恢复 Activity 状态,因为它并非设计用于携带大型对象(例如位图),而且其中的数据必须先序列化,再进行反序列化,这可能会消耗大量内存并使得配置变更速度缓慢。 在这种情况下,如果 Activity 因配置变更而重启,则可通过保留 Fragment 来减轻重新初始化 Activity 的负担。此片段可能包含对您要保留的有状态对象的引用。
当 Android 系统因配置变更而关闭 Activity 时,不会销毁您已标记为要保留的 Activity 的片段。 您可以将此类片段添加到 Activity 以保留有状态的对象。
要在运行时配置变更期间将有状态的对象保留在片段中,请执行以下操作:
扩展 Fragment 类并声明对有状态对象的引用。
在创建片段后调用 setRetainInstance(boolean)。
将片段添加到 Activity。
重启 Activity 后,使用 FragmentManager 检索片段。
例如,按如下方式定义片段:
public class RetainedFragment extends Fragment { // data object we want to retain private MyDataObject data; // this method is only called once for this fragment @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // retain this fragment setRetainInstance(true); } public void setData(MyDataObject data) { this.data = data; } public MyDataObject getData() { return data; }}
然后,使用 FragmentManager 将片段添加到 Activity。在运行时配置变更期间再次启动 Activity 时,您可以获得片段中的数据对象。 例如,按如下方式定义 Activity:
public class MyActivity extends Activity { private RetainedFragment dataFragment; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // find the retained fragment on activity restarts FragmentManager fm = getFragmentManager(); dataFragment = (DataFragment) fm.findFragmentByTag(“data”); // create the fragment and data the first time if (dataFragment == null) { // add the fragment dataFragment = new DataFragment(); fm.beginTransaction().add(dataFragment, “data”).commit(); // load the data from the web dataFragment.setData(loadMyData()); } // the data is available in dataFragment.getData() ... } @Override public void onDestroy() { super.onDestroy(); // store the data in the fragment dataFragment.setData(collectMyLoadedData()); }}
自行处理配置变更
注:自行处理配置变更可能导致备用资源的使用更为困难,因为系统不会为您自动应用这些资源。 只能在您必须避免 Activity 因配置变更而重启这一万般无奈的情况下,才考虑采用自行处理配置变更这种方法,而且对于大多数应用并不建议使用此方法。
<activity android:name=".MyActivity" android:configChanges="orientation|keyboardHidden" android:label="@string/app_name">
- 处理运行时变更
- 处理运行时变更
- 处理运行时变更
- android 处理运行时变更
- Activity 自行处理运行时变更
- 官方API指南之处理运行时变更
- 处理运行时变更---Develop ---API Guides ---App Resources
- Android处理运行时变更保存数据状态恢复Activity
- android-支持多种屏幕[处理运行时变更] 十六
- Android-运行时配置变更
- android处理运行时的变更(较大数据的保存)
- 处理运行时变更,activity被销毁后的重建,常见于屏幕旋转
- 处理Fragment配置变更
- c#winfrom PropertyGrid 运行时变更属性项
- 高新技术企业认定发生变更时的处理办法。
- 处理运行时更改
- 处理运行时更改
- 处理运行时变化
- 转,Oracle中关于处理小数点位数的几个函数,取小数位数,Oracle查询函数
- phantomjs和selenium设置proxy、headers
- Java线程:线程的调度-优先级
- 解决 PHPExcel 长数字串显示为科学计数
- 题目1114:神奇的口袋
- 处理运行时变更
- 移动端的下拉刷新
- 18:买书
- linux目录结构
- 百度地图2.0离线版的制作
- python 自动复制脚本代码
- HDU 2191 珍惜现在,感恩生活
- mybatis 中#与$的区别
- SuperMap iServer 正式版tar包在linux上的部署