Android8.0有关行为变更小结

来源:互联网 发布:索尼网络签约经销商 编辑:程序博客网 时间:2024/03/29 04:24

前言

Android8.0已经发布,作为开发者还是有必要去看看8.0一些API和系统相关的改动。官方有一个关于Android8.0 行为变更的有关说明,下面是自己的一个小结。


在开始之前要先说清楚一个概念,官方将Android 8.0 行为变更分为两个部分:针对所有 API 级别的应用和针对 Android 8.0 的应用。针对 Android 8.0的应用改动,是该变动只会在targetSdkVersion >=26(8.0)的应用上生效。针对 所有 API 级别的应用改动,是该变动会在所有的应用上生效,和targetSdkVersion无关。

举个例子,Android6.0有一个动态权限的机制改动。该改动只会在targetSdkVersion >=23(6.0)上的应用生效,在targetSdkVersion<23上的应用权限不需要动态申请。

Android 8.0 相关变更

  • 后台执行限制改动默认只只针对Android8.0及以上,不过用户可以设置将该改动作用于任何应用。
    1. 处于后台的应用不在允许创建后台服务了,如果创建会抛出一个IllegalStateException异常。
    2. 应用进入后台应用时会有一个时间窗,在该时间窗之内应用的后台服务还是在运行且可以创建后台服务,该事件窗口结束之后系统会将后台服务结束。
    3. 应用在后台可以在任何时候通过NotificationManager.startServiceInForeground()创建前台服务,startService() 不能使用,bindService()没有限制。
    4. 移除了大部分的隐式广播,只保留了少许隐式广播。保留的隐式广播
    5. 主要是去除和应用本身无关的广播,例如ACTION_PACKAGE_REPLACED。只针对自己应用的广播还是有效,例如ACTION_MY_PACKAGE_REPLACED。
    6. 官方建议使用 JobScheduler代替以上大部分需求场景。
  • 后台位置限制改动针对所有API级别
    1. 处于后台的应用每隔几小时接收几次位置更新。
    2. 前台应用行为不变
    3. 官方建议使用前台服务、 Geofencing API 的元素(例如 GeofencingApi 接口)保证位置实时性。
  • 提醒窗口变更针对Android8.0及以上
    1. 新增一个Window Type,TYPE_APPLICATION_OVERLAY。
      显示在
      TYPE_PHONE
      TYPE_PRIORITY_PHONE
      TYPE_SYSTEM_ALERT
      TYPE_SYSTEM_OVERLAY
      TYPE_SYSTEM_ERROR

      这些窗口之上。
    2. TYPE_APPLICATION_OVERLAY感觉是google 专门用来给开发者做悬浮窗的。
  • WebView
    1. 应用的 WebView 对象将在多进程模式下运行。网页内容在独立的进程中处理,此进程与包含应用的进程相隔离,以提高安全性。
    2. Android 自动填充框架提供对自动填充功能的内置支持,因此有关表单数据的保存、清楚、获取方法无效(WebSettings:getSaveFormData() setSaveFormData() 和 WebViewDatabase: clearFormData() hasFormData() )。
  • ANDROID_ID
    1. 对于安装在运行 Android 8.0 的设备上的应用,ANDROID_ID 的值现在将根据应用签署密钥和用户确定作用域。应用签署密钥、用户和设备的每个组合都具有唯一的 ANDROID_ID 值。因此,在相同设备上运行但具有不同签署密钥的应用将不会再看到相同的 Android ID(即使对于同一用户来说,也是如此)
  • 权限申请变更只针对Android8.0及以上
    1. 之前动态申请权限的时候,如果用户同意了某个权限的申请,系统会将该权限同组的所有权限都授予给应用。8.0开始只会授予申请的那个权限,不过之后如果应用在申请之前授权权限同组的权限时,系统会自动授予不会提醒用户进行授权。
  • 原生库变动针对 Android 8.0及以上
    1. 如果原生库包含任何可写且可执行的加载代码段,则不会再加载原生库。
  • 集合的处理变动针对 Android 8.0及以上
    1. 为了利用优化的 List.sort(),在 Android 8.0 中,Collections.sort() 是在 List.sort() 的基础上实现的。
  • 其他改动 详见官网

总结

可以看出8.0对后台应用的限制越来越多,对于一些流氓应用(通过系统广播唤醒、在后台启动后台服务等)还是有些作用的,毕竟用户可以通过手动设置将后台限制作用于任何targetSdkVersion的app。不过Google对大厂的相互唤醒还没怎么动手,bat还是照常流氓233。话说过来,个人感觉ios的APNS做的还是比较不错的,希望Google的fcm也加把劲,虽然国内不能用 摊手-_-。

原创粉丝点击