Android 数据恢复 view的id
来源:互联网 发布:淘宝网秋季女装 编辑:程序博客网 时间:2024/04/28 03:28
转自:http://blog.csdn.net/desiringm/article/details/7607338
大家都知道,android系统的资源ID的分配是在编译完成之后就确定了的,而资源的搜索是根据包进行搜索的,这就说明不同包下的资源ID是有可能相同的。那么,小插件View的ID就有可能与小插件的宿主(一般是Launcher)中的某个View的ID相同。如果真是这样,那么错误就有可能发生了。
Activity中有两个对称的函数onSaveInstanceState和onRestoreInstanceState,这两个函数的主要作用是在Activity被无故Kill掉的时候保存Activity所处Window下的所有View的状态和Activity被重新启动后,利用已经保存的状态,还原所有View。我们来看看源码:
首先看看Activity中的onSaveInstanceState过程。
1、Activity的onSaveInstanceState函数
2、PhoneWindow的saveHierarchyState函数
3、ViewGroup的saveHierarchyState函数(由于ViewGroup继承自View,但是没有实现View中的saveHierarchyState函数,所以ViewGroup中的saveHierarchyState函数体是View中saveHierarchyState函数体)
4、ViewGroup中的dispatchSaveInstaceState函数
5、View中的dispatchSaveInstaceState函数
6、View中的onSaveInstanceState函数
至此Activity的onSaveInstanceState就已经完成,下面看看Activity 的onRestoreInstanceState的过程。
1、Activity中的onRestoreInstanceState函数
2、PhoneWindow中的restoreHierarchyState函数
3、ViewGroup中的restoreHierarchyState函数(由于ViewGroup继承自View,但是没有实现View中的restoreHierarchyState函数,所以ViewGroup中的restoreHierarchyState函数体是View中restoreHierarchyState函数体)
4、ViewGroup中的dispatchRestoreInstanceState函数
5、View中的dispatchRestoreInstanceState函数
6、View中的onRestoreInstanceState函数
至此Activity中的onRestoreInstanceState已经完成。
从上面的源码中,我们可以看出,如果在同一个View的层级下有多个View的mID(mID是View的layout中的android:id所分配的值)相同,那么最后调用到View的onRestoreInstanceState的时候就会抛出一个IllegalArgumentException。
上面说过,不同包中的View的layout中的android:id所分配的值是有可能相同的,而对于小插件来说,小插件的View在编译的时候是在小插件包中的,但是小插件最终被使用显示在用户面前,是处在宿主的View层级中,所以就有可能出错了。
0 0
- Android 数据恢复 view的id
- 关于Android开发中的view的id
- Android 动态设置view的id,id设置为数字
- 恢复删除的view
- Android 不同View ID相同
- Android中View的id(个人备忘)
- Android - 动态设置自定义View的id - setId
- Android 动态设置View的id——setId
- Android 之View界面的存储与恢复的异常
- Android 如何保存与恢复自定义View的状态?
- 【Android面试】(二):你不能不知道的view---加id和不加id的区别?
- MR_ Android view client source code(3)---获取当前view id的名称
- android数据恢复
- android中通过id获得drawable类型的数据
- android view类的settag gettag就是在类中加了一个类似id的字段?
- Android中通过反射和getResource()得到id的方式去改变View的显示效果
- Android的数据恢复的唯一方法,您可以使用
- 硬盘的数据恢复
- 输入两个数,求最大公约数和最小公倍数
- 编写各种outofmemory/stackoverflow程序
- h5页面ios,双击向上滑动,拖拽到底部还能继续拖拽
- 笔记-VC6.0表格控件的使用
- Ionic学习笔记七 Cordova 文件下载插件的使用
- Android 数据恢复 view的id
- OPENGL 矩阵坐标系变换
- 魔兽世界私服Trinity-core分析
- 【leetcode】Two Sum(medium)
- ElasticSearch使用教程四(ElasticSearch查询详解)
- Jsp与servlet的区别
- 一位优秀的Leader应该做好的8件事
- ntpd vs. ntpdate
- internal c# 关键字的理解