Android各版本之间更新存在一些新特性,熟悉这些特性才可以避免在开发过程中踩坑。就我自己平常在开发的过程中遇见的问题及查询网上资料得到一些Android版本更新的特性。
Android 5.0
- 5.0推出ART虚拟机,不再使用之前的Dalvik虚拟机。两者区别在于字节码的编译时机。
- 在Dalvik下,应用每次运行时都会执行字节码转换机器码操作。
- 在ART下,应用在第一次安装的时候,字节码就会预先转换成机器码。
ART的优缺点
优点:运行快
缺点:1. 机器码占用的存储空间更大(以空间换时间) 2. 应用的安装时间更长
Android 6.0
- 新增了动态权限申请功能。
- 正常权限仅在AndroidManifest中声明即可,系统将自动授予权限。而对于一些危险权限不仅仅需要在AndroidManifest中声明,还需要用户手动授权来获取权限,否则应用无法获取到相对应的权限。可以用
checkSelfPermission
来检测权限是否授权,用requestPermissions
来申请权限。在onRequestPermissionsResult
中对申请权限后的处理,可在此中检测是否权限已授权来提示相应的信息。 Android 6.0变化
- 正常权限仅在AndroidManifest中声明即可,系统将自动授予权限。而对于一些危险权限不仅仅需要在AndroidManifest中声明,还需要用户手动授权来获取权限,否则应用无法获取到相对应的权限。可以用
(图 from Android Developers)
- Doze模式和App Standby模式。
- 用户的Android设备处于未充电状态,静止且屏幕关闭一段时间之后,Android系统就会自动进入Doze模式。在Doze模式下,Android系统将会通过限制后台应用对CPU密集型服务以及网络的使用来减少电量消耗。此外,Android系统还会推迟后台应用的Jobs、Syncs和Alarms等操作。而在App Standby模式下Android系统会使一个用户长时间未使用的应用进入空闲状态。了解Doze模式及App Standby模式有助于在进行应用保护方面的帮助,同时需要还有一点需要注意,由于各自定义Android系统不同,在不同的系统厂商下,系统保护策略在同一条件下可能出现不同情况。
Android 7.0
-
7.0和之前的Android版本在修改Context配置时不同(例如在应用内修改系统语言)。在7.0之前直接在
Application
修改系统Configuration
的Locale
即可修改系统语言。而在7.0之后需要每个Application
和Activity
中的attachBaseContext
修改Configuration
的Locale
。 -
之前的版本代码中安装Apk直接将apk文件封装成URI传给Intent即可,而7.0及之后需要在AndroidManifest中声明使用
provider
来提取apk文件然后传给Intent才行。
Android 8.0
- 对于前台服务需要添加权限
android.permission.FOREGROUND_SERVICE
。开启前台服务要使用startForeground
。
Android Q 10.0
- 从10.0开始,Android对安全性又加强了。在Android Q版本的设备上除了系统应用可通过READ_PHONE_STATE权限获取到IMEI、DeviceId之前,其他第三方应用添加该权限也无法获取到IMEI和DeviceId。即使你的Target版本在Android 10.0之下也无法获取到。