CN105677498B - 一种安卓系统上View控件状态保存的优化方法 - Google Patents
一种安卓系统上View控件状态保存的优化方法 Download PDFInfo
- Publication number
- CN105677498B CN105677498B CN201511008079.3A CN201511008079A CN105677498B CN 105677498 B CN105677498 B CN 105677498B CN 201511008079 A CN201511008079 A CN 201511008079A CN 105677498 B CN105677498 B CN 105677498B
- Authority
- CN
- China
- Prior art keywords
- view
- view controls
- values
- controls
- state
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/0703—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
- G06F11/0766—Error or fault reporting or storing
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本发明涉及一种安卓系统上View控件状态保存的优化方法,本发明通过动态改变View控件的ID值来防止在“非应用行为”退出时View状态未保存或者状态保存错误的发生,适用于android各类智能终端设备。通过改变特殊情况下的View的ID值,解决了用户在“非应用行为”退出Activity时未保存必要的View状态的问题,使得应用在重建Activity时恢复到意外退出时的状态,改善了用户体验。
Description
技术领域
本发明涉及一种安卓系统上View控件状态保存的优化方法,属于安卓系统优化技术领域。
背景技术
随着移动平台的快速发展,越来越多的开发人员开始转向移动互联网应用开发,移动互联网应用急剧增加。同时,随着移动互联网的迅速发展,用户的上网方式开始向移动方向转移。手机不再只是一个简单的通讯工具,用户可以使用手机实现办公、娱乐、社交等功能。移动开发人员的逐渐增多和用户需求的不断变化,这些因素都加剧了移动操作系统的竞争。目前,智能移动操作系统有:Android、IOS和Windows Phone。虽然Android系统在智能终端市场上占有比较大的份额,但是Android系统上仍有一些不足,值得开发人员继续对其进行优化。例如,当系统在未经“允许”的突发情况下结束掉Activity,在进入这种状态之前,肯定需要保存一下必要的View状态(显示的数据和是否处于焦点等,下面View的状态均按上述的解释处理),然而,android系统只会对特定情况下的View状态进行保存,本文就是针对android系统中对onSaveInstanceState处理View状态保存时存在的上述问题进行优化,以提升系统性能,改善用户体验。
在Android系统中,每当有“非应用行为”退出Activity(相对于“应用行为”退出Activity而言,“应用行为”退出Activity是指主动调用finish()方法,或者主动按Back键,让Activity结束)时,系统会调用Activity的onSaveInstanceState方法。在这个方法中android系统会首先创建一个Bundle对象,用于存放View的状态。在创建好Bundle对象之后,系统会找到对应Activity的View树的根视图,即DecorView。DecorView会调用自己的saveHierarchyState方法,遍历的保存View树下各个View的状态。由于android系统是以ID值作为Key-Value的Key来保存View的状态,所以在编写应用界面的时候设置过ID值(在xml布局文件中指定过android:id的属性或者在view的setId方法中设置过ID值)的View才可以进行状态保存。也就是,即使Activity中的处于焦点的View控件,如果没有为此View设置过ID值,它的状态就无法保存,也就无法在Activity重建时恢复焦点View控件的状态。此外,如果在同一个Activity中有相同ID的同种类型的View控件,处于View树视图较远的地方的View会在状态保存的时候覆盖掉前面相同ID的View控件的状态。
发明内容
针对现有技术的不足,本发明提供了一种安卓系统上View控件状态保存的优化方法;
本发明通过动态改变View控件的ID值来防止在“非应用行为”退出时View状态未保存或者状态保存错误的发生,适用于android各类智能终端设备。通过改变特殊情况下的View的ID值,解决了用户在“非应用行为”退出Activity时未保存必要的View状态的问题,使得应用在重建Activity时恢复到意外退出时的状态,改善了用户体验。
本发明的技术方案为:
一种安卓系统上View控件状态保存的优化方法,具体步骤包括:
(1)创建一个Bundle对象;
(2)获取到View视图的根视图DecorView;
(3)创建一个SparseArray,SparseArray包括一个key数组和一个value数组,类似于Map容器,key数组用来放置View控件的ID值,value数组用来放置View控件的状态,所述状态是指,例如,View控件显示的数据或者View控件是否处于pressed状态、selected状态或focused状态。
(4)调用dispatchSaveInstanceState()方法对View视图下所有的View控件进行遍历,并将View控件的ID值及其状态保存到所述SparseArray中:判断View控件是否存在ID值:①如果View控件不存在ID值,则检测该View控件是否处于pressed、selected、focused中的一个或其中几个状态,其中,pressed是指按下View控件后未松开的动作,selected是指选中动作,focused是指获得焦点的动作;如果是,为该View控件设置一个ID值并保存该View控件的状态,否则,对该View控件不作任何处理;②如果View控件存在ID值,则从SparseArray中查找所有View控件的ID值是否与该View控件的ID值相同,如果相同,则改变该View控件的ID值,并将改变后的该View控件的ID值及该View控件的状态保存SparseArray中,否则,直接将该View控件的ID值及该View控件的状态保存SparseArray中;
(5)将步骤(4)得到的SparseArray保存在步骤(1)所述的Bundle对象中。
本发明的有益效果为:
本发明通过动态改变View控件的ID值来防止在“非应用行为”退出时View状态未保存或者状态保存错误的发生,适用于android各类智能终端设备。通过改变特殊情况下的View的ID值,解决了用户在“非应用行为”退出Activity时未保存必要的View状态的问题,使得应用在重建Activity时恢复到意外退出时的状态,改善了用户体验。
附图说明
图1为现有的所述安卓系统上View控件状态保存的优化方法流程图;
图2为本发明所述安卓系统上View控件状态保存的优化方法流程图。
具体实施方式
下面结合说明书附图和实施例对本发明作进一步限定,但不限于此。
实施例
一种安卓系统上View控件状态保存的优化方法,具体步骤包括:
(1)创建一个Bundle对象;
(2)获取到View视图的根视图DecorView;
(3)创建一个SparseArray,SparseArray包括一个key数组和一个value数组,类似于Map容器,key数组用来放置View控件的ID值,value数组用来放置View控件的状态,所述状态是指,例如,View控件显示的数据或者View控件是否处于pressed状态、selected状态或focused状态。
(4)调用dispatchSaveInstanceState()方法对View视图下所有的View控件进行遍历,并将View控件的ID值及其状态保存到所述SparseArray中:判断View控件是否存在ID值:①如果View控件不存在ID值,则检测该View控件是否处于pressed、selected、focused中的一个或其中几个状态,其中,pressed是指按下View控件后未松开的动作,selected是指选中动作,focused是指获得焦点的动作;如果是,为该View控件设置一个ID值并保存该View控件的状态,否则,对该View控件不作任何处理;②如果View控件存在ID值,则从SparseArray中查找所有View控件的ID值是否与该View控件的ID值相同,如果相同,则改变该View控件的ID值,并将改变后的该View控件的ID值及该View控件的状态保存SparseArray中,否则,直接将该View控件的ID值及该View控件的状态保存SparseArray中;
(5)将步骤(4)得到的SparseArray保存在步骤(1)所述的Bundle对象中。
如图2所示。
Claims (1)
1.一种安卓系统上View控件状态保存的优化方法,其特征在于,具体步骤包括:
(1)创建一个Bundle对象;
(2)获取到View视图的根视图DecorView;
(3)创建一个SparseArray,SparseArray包括一个key数组和一个value数组,key数组用来放置View控件的ID值,value数组用来放置View控件的状态;
(4)调用dispatchSaveInstanceState()方法对View视图下所有的View控件进行遍历,并将View控件的ID值及其状态保存到所述SparseArray中:判断View控件是否存在ID值:①如果View控件不存在ID值,则检测该View控件是否处于pressed、selected、focused中的一个或其中几个状态,其中,pressed是指按下View控件后未松开的动作,selected是指选中动作,focused是指获得焦点的动作;如果是,为该View控件设置一个ID值并保存该View控件的状态,否则,对该View控件不作任何处理;②如果View控件存在ID值,则从SparseArray中查找所有View控件的ID值是否与该View控件的ID值相同,如果相同,则改变该View控件的ID值,并将改变后的该View控件的ID值及该View控件的状态保存SparseArray中,否则,直接将该View控件的ID值及该View控件的状态保存在SparseArray中;
(5)将步骤(4)得到的SparseArray保存在步骤(1)所述的Bundle对象中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201511008079.3A CN105677498B (zh) | 2015-12-29 | 2015-12-29 | 一种安卓系统上View控件状态保存的优化方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201511008079.3A CN105677498B (zh) | 2015-12-29 | 2015-12-29 | 一种安卓系统上View控件状态保存的优化方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105677498A CN105677498A (zh) | 2016-06-15 |
CN105677498B true CN105677498B (zh) | 2018-05-25 |
Family
ID=56297800
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201511008079.3A Active CN105677498B (zh) | 2015-12-29 | 2015-12-29 | 一种安卓系统上View控件状态保存的优化方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105677498B (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102110130A (zh) * | 2010-09-17 | 2011-06-29 | 苏州阔地网络科技有限公司 | 一种网页上实现麦克风检测的方法 |
CN102937859A (zh) * | 2012-10-19 | 2013-02-20 | 山东大学 | 一种基于Android操作系统的桌面系统的实现方法 |
CN103019942A (zh) * | 2012-12-31 | 2013-04-03 | 广东欧珀移动通信有限公司 | 一种基于安卓系统的待测应用自动测试方法和系统 |
CN103577699A (zh) * | 2013-11-14 | 2014-02-12 | 哈尔滨工程大学 | 一种基于Android平台的DICIOM医学图像显示处理方法 |
CN104423870A (zh) * | 2013-09-10 | 2015-03-18 | 北京三星通信技术研究有限公司 | 图形用户界面中的控件、显示方法及操作控件的方法和装置 |
CN105022634A (zh) * | 2015-07-22 | 2015-11-04 | 上海斐讯数据通信技术有限公司 | 一种锁屏属性传递方法及移动终端 |
-
2015
- 2015-12-29 CN CN201511008079.3A patent/CN105677498B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102110130A (zh) * | 2010-09-17 | 2011-06-29 | 苏州阔地网络科技有限公司 | 一种网页上实现麦克风检测的方法 |
CN102937859A (zh) * | 2012-10-19 | 2013-02-20 | 山东大学 | 一种基于Android操作系统的桌面系统的实现方法 |
CN103019942A (zh) * | 2012-12-31 | 2013-04-03 | 广东欧珀移动通信有限公司 | 一种基于安卓系统的待测应用自动测试方法和系统 |
CN104423870A (zh) * | 2013-09-10 | 2015-03-18 | 北京三星通信技术研究有限公司 | 图形用户界面中的控件、显示方法及操作控件的方法和装置 |
CN103577699A (zh) * | 2013-11-14 | 2014-02-12 | 哈尔滨工程大学 | 一种基于Android平台的DICIOM医学图像显示处理方法 |
CN105022634A (zh) * | 2015-07-22 | 2015-11-04 | 上海斐讯数据通信技术有限公司 | 一种锁屏属性传递方法及移动终端 |
Also Published As
Publication number | Publication date |
---|---|
CN105677498A (zh) | 2016-06-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2019518257A (ja) | 状態制御方法及び装置 | |
CN109088995A (zh) | 支持全球语言翻译的方法及手机 | |
CN107622709A (zh) | 知识点掌握程度评价方法、介质和电子设备 | |
CN106033393A (zh) | 一种应用程序测试方法及系统以及移动终端 | |
US10949991B2 (en) | Method and apparatus for determining position of pupil | |
JP2019502980A5 (zh) | ||
CN104376056B (zh) | 一种数据处理的方法和装置 | |
CN104424240A (zh) | 多表关联方法、主服务节点、计算节点及系统 | |
CN104063303A (zh) | 一种获取和释放root权限的方法 | |
CN105677498B (zh) | 一种安卓系统上View控件状态保存的优化方法 | |
CN106055271A (zh) | 一种基于云计算的重复数据去重选择方法及装置 | |
CN105159664A (zh) | 基于javascript实现键值对存储的方式 | |
WO2015088557A1 (en) | Data stream processing based on a boundary parameter | |
CN104618471B (zh) | 面向不同终端的应用程序状态转移方法 | |
CN109992652A (zh) | 一种信息回复方法、装置、设备及存储介质 | |
CN104021085A (zh) | 一种移动终端内存清理方法和装置 | |
RU2015115523A (ru) | Системы и способы для вычисления решений уравнений геометрических связей реализуемых компьютером виртуальных моделей | |
US20190129737A1 (en) | Virtual private cloud services with physical machine servers and virtual machines | |
CN107547468A (zh) | 网络协议切换装置、方法及终端 | |
CN104462322A (zh) | 字符串比对方法和装置 | |
US10693731B2 (en) | Flow entry management method and device | |
CN107659652A (zh) | 一种云备份的方法及装置 | |
CN103778220A (zh) | 一种基于云计算的决策支持方法和装置 | |
CN106911634A (zh) | 一种登录方法和设备 | |
CN105706397A (zh) | 一种基于微信的共享信息分享方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |