android权威指南十三章,《Android编程权威指南》第14~15章读书笔记

本文介绍了Android中Fragment的保留机制,包括如何通过setRetainInstance(true)避免因设备旋转导致的销毁,以及在内存回收时的影响。同时,讨论了onSaveInstanceState()与Fragment保留的区别,强调了数据保留的时间差异。此外,详细阐述了Android应用的本地化资源管理,包括创建目标语言目录、资源匹配原则以及资源使用的注意事项。
摘要由CSDN通过智能技术生成

fragment的保留

fragment的retainInstance属性值默认为false,可以通过setRetainInstance(boolean)去修改,该值为true则表示fragment将会被保留。已保留的fragment不会随activity一起被销毁,会一直保留并在需要的时候传递给新的activity,其中的全部变量实例(如button、textview等)也将保持不变。

被保留的fragment的实质

被保留的fragment,实际上是fragment实例没有被销毁,随着activity销毁的是它的视图。当新的activity创建后,新的FragmentManager会指向被保留的fragment,并重新创建视图。

ac5222255fdc

图片来源于《Android编程权威指南》

fragment必须同时满足两个条件才能进入保留状态:

1.已调用fragment的setRetainInstance(true);

2.因设备配置改变(通常为设备旋转),托管activity正在被销毁。

保留fragment与onSaveInstanceState(Bundle)的比较

两者的区别主要在与:数据保存时间。

被保留的fragment虽然不会随着activity的销毁而销毁(如设备旋转),不过如果activity是因为OS需要回收内存而被销毁的话,被保留的fragment也会被销毁。

onSaveInstanceState()数据保留时间则是维持在整个Activity生命周期。

因此,如果在设备旋转的时候,点击home键使得Activity处于后台(onStop()),此时,OS回收内存,销毁了Activity,被保留的fragment随之销毁,而新建的Activity则能够调用onSaveInstanceState()保留的数据。

本地化资源

本地化是一个基于设备语言设置,为应用提供合适资源的过程。

本地化过程:

1.创建带有目标语言配置修饰符的资源子目录;

2.将可选资源放入1的子目录中。

语言配置修饰符来自于ISO 639-1标准代码,如中文的修饰符为-zh,英文为-en。

默认资源

当Android无法找到匹配设备配置的资源时,会使用默认资源。所以默认资源的最大作用是保证应用的正常运行。

使用dpi、分辨率等修饰符的稍有区别,找不到匹配配置的资源时,先根据自有的规则找相近的资源文件,若一直找不到,最后才使用默认资源。

配置修饰符

ac5222255fdc

配置修饰符优先级表

Android会基于上图所示顺序确定修饰符的使用优先级。

多重配置修饰符

在同一资源目录上使用多个配置修饰符,各配置修饰符必须按照优先级顺序排列。如values-zh-land是一个有效的资源目录名,而values-land-zh则是无效的。

资源匹配

1.排除不兼容的目录

如values-zh-land和values-zh在屏幕方向为竖直时,前者不兼容,后者兼容,使用后者的资源;

2.按优先级表筛选

在1.的基础上,按照优先级表进行筛选,如values-zh-land和values-zh在屏幕方向为水平时,两者都兼容,同样有语言修饰符,那么再看屏幕方向,后者被排除,前者被使用。

注意:屏幕显示密度并不适用于上述规则,Android会选择其认为最合适的资源来匹配设备配置,这些资源可能不对应设备配置修饰符目录下准备的资源。

资源使用原则

资源命名

1.资源名只能是小写且不能包含空格;

2.引用不应包含文件拓展名。

资源目录结构

1.所有资源都必须保存在res/目录的子目录下;

2.res子目录的名字与Android编译过程绑定,无法随意更改,规定的有drawable/、layouot/、raw/、values/等;

3.Android会无视res/目录下的其它子目录,如res/my_stuff/,Android不会使用里面放置的资源;

4.无法在res/目录下创建多级子目录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值