Android各版本特性

2019/09/16 Android

Android各版本之间更新存在一些新特性,熟悉这些特性才可以避免在开发过程中踩坑。就我自己平常在开发的过程中遇见的问题及查询网上资料得到一些Android版本更新的特性。

Android 5.0

  1. 5.0推出ART虚拟机,不再使用之前的Dalvik虚拟机。两者区别在于字节码的编译时机。
    • 在Dalvik下,应用每次运行时都会执行字节码转换机器码操作。
    • 在ART下,应用在第一次安装的时候,字节码就会预先转换成机器码。
      ART的优缺点
      优点:运行快
      缺点:1. 机器码占用的存储空间更大(以空间换时间) 2. 应用的安装时间更长

Android 6.0

  1. 新增了动态权限申请功能。
    • 正常权限仅在AndroidManifest中声明即可,系统将自动授予权限。而对于一些危险权限不仅仅需要在AndroidManifest中声明,还需要用户手动授权来获取权限,否则应用无法获取到相对应的权限。可以用checkSelfPermission来检测权限是否授权,用requestPermissions来申请权限。在onRequestPermissionsResult中对申请权限后的处理,可在此中检测是否权限已授权来提示相应的信息。 Android 6.0变化

(图 from Android Developers)

  1. Doze模式和App Standby模式。
    • 用户的Android设备处于未充电状态,静止且屏幕关闭一段时间之后,Android系统就会自动进入Doze模式。在Doze模式下,Android系统将会通过限制后台应用对CPU密集型服务以及网络的使用来减少电量消耗。此外,Android系统还会推迟后台应用的Jobs、Syncs和Alarms等操作。而在App Standby模式下Android系统会使一个用户长时间未使用的应用进入空闲状态。了解Doze模式及App Standby模式有助于在进行应用保护方面的帮助,同时需要还有一点需要注意,由于各自定义Android系统不同,在不同的系统厂商下,系统保护策略在同一条件下可能出现不同情况。

Android 7.0

  1. 7.0和之前的Android版本在修改Context配置时不同(例如在应用内修改系统语言)。在7.0之前直接在Application修改系统ConfigurationLocale即可修改系统语言。而在7.0之后需要每个ApplicationActivity中的attachBaseContext修改ConfigurationLocale

  2. 之前的版本代码中安装Apk直接将apk文件封装成URI传给Intent即可,而7.0及之后需要在AndroidManifest中声明使用provider来提取apk文件然后传给Intent才行。

Android 8.0

  1. 对于前台服务需要添加权限android.permission.FOREGROUND_SERVICE。开启前台服务要使用startForeground

Android Q 10.0

  1. 从10.0开始,Android对安全性又加强了。在Android Q版本的设备上除了系统应用可通过READ_PHONE_STATE权限获取到IMEI、DeviceId之前,其他第三方应用添加该权限也无法获取到IMEI和DeviceId。即使你的Target版本在Android 10.0之下也无法获取到。

引用

Search

    Table of Contents