Android 8.1 的一些变化

此处列举一些已知的 Android 8.1 系统的一些变化(相对 Android 7.1 来说),供大家参考。

1. UI 变化

  • Settings 首界面顶部添加搜索工具栏;
  • SystemUI 快捷设置工具条背景半透明;
  • 长按Power键弹出的关机、重启弹出窗界面靠近Power键;

2. 功能变化

  • 对后台服务限制更严格;当应用处于后台时,后台运行的服务会在几分钟内被stop掉;后台服务被stop后应用无法再创建后台服务,但可以创建前台服务;官方推荐使用 AlarmManager、SyncAdapter、JobScheduler代替后台服务;
  • 隐式广播做了更多限制,基本上除了系统原生的个别广播(比如开机广播),app自定义广播都无法使用;在应用内动态注册的显示广播不受影响;从Android 7.0 开始,谷歌取消了电量变化、连接变化的隐式广播,也取消了 ACTION_NEW_PICTURE 或ACTION_NEW_VIDEO  的隐式广播;
    • 隐式广播例外情况
      有几种广播目前不会受这些限制。,无论应用目标平台的 API 级别为何,都可以继续注册下列广播的侦听器。 
      1. ACTION_LOCKED_BOOT_COMPLETED、ACTION_BOOT_COMPLETED:原因:这些广播只在首次启动时发送一次,并且许多应用都需要接收此广播以便进行作业、闹铃等事项的安排。 
      2. ACTION_USER_INITIALIZE、”android.intent.action.USER_ADDED”、”android.intent.action.USER_REMOVED”:原因:这些广播受特权保护,因此大多数正常应用无论如何都无法接收它们。 
      3. “android.intent.action.TIME_SET”、ACTION_TIMEZONE_CHANGED:原因:时钟应用可能需要接收这些广播,以便在时间或时区变化时更新闹铃。 
      4. ACTION_LOCALE_CHANGED:原因:只在语言区域发生变化时发送,并不频繁。 应用可能需要在语言区域发生变化时更新其数据。 
      5.ACTION_USB_ACCESSORY_ATTACHED、ACTION_USB_ACCESSORY_DETACHED、ACTION_USB_DEVICE_ATTACHED、ACTION_USB_DEVICE_DETACHED:原因:如果应用需要了解这些 USB 相关事件的信息,目前尚未找到能够替代注册广播的可行方案。 
      6. ACTION_HEADSET_PLUG:原因:由于此广播只在用户进行插头的物理连接或拔出时发送,因此不太可能会在应用响应此广播时影响用户体验。 
      7. ACTION_CONNECTION_STATE_CHANGED、ACTION_CONNECTION_STATE_CHANGED:原因:与 ACTION_HEADSET_PLUG 类似,应用接收这些蓝牙事件的广播时不太可能会影响用户体验。 
      8. ACTION_CARRIER_CONFIG_CHANGED, TelephonyIntents.ACTION_*_SUBSCRIPTION_CHANGED、”TelephonyIntents.SECRET_CODE_ACTION”:原因:原始设备制造商 (OEM) 电话应用可能需要接收这些广播。 
      9. LOGIN_ACCOUNTS_CHANGED_ACTION:原因:一些应用需要了解登录帐号的变化,以便为新帐号和变化的帐号设置计划操作。 
      10. ACTION_PACKAGE_DATA_CLEARED:原因:只在用户显式地从 Settings 清除其数据时发送,因此广播接收器不太可能严重影响用户体验。 
      11. ACTION_PACKAGE_FULLY_REMOVED:原因:一些应用可能需要在另一软件包被移除时更新其存储的数据;对于这些应用,尚未找到能够替代注册此广播的可行方案。 
      12. ACTION_NEW_OUTGOING_CALL:原因:执行操作来响应用户打电话行为的应用需要接收此广播。 
      13. ACTION_DEVICE_OWNER_CHANGED:原因:此广播发送得不是很频繁;一些应用需要接收它,以便知晓设备的安装状态发生了变化。 
      14. ACTION_EVENT_REMINDER:原因:由日历提供程序发送,用于向日历应用发布事件提醒。因为日历提供程序不清楚日历应用是什么,所以此广播必须是隐式广播。 
      15. ACTION_MEDIA_MOUNTED、ACTION_MEDIA_CHECKING、ACTION_MEDIA_UNMOUNTED、ACTION_MEDIA_EJECT、 ACTION_MEDIA_UNMOUNTABLE、ACTION_MEDIA_REMOVED、ACTION_MEDIA_BAD_REMOVAL:原因:这些广播是作为用户与设备进行物理交互的结果(安装或移除存储卷)或启动初始化(作为已装载的可用卷)的一部分发送的,因此它们不是很常见,并且通常是在用户的掌控下。 
      16. SMS_RECEIVED_ACTION、WAP_PUSH_RECEIVED_ACTION:原因:这些广播依赖于短信接收应用。

       

  • 通知: 应用程序现在只能每秒发出一次通知警报声音。超过这个速度的警报声音不会排队并丢失。此更改不会影响通知行为的其他方面,通知邮件仍按预期发布。
  • 后台位置限制改动针对所有API级别:处于后台的应用每隔几小时接收几次位置更新;前台应用行为不变;官方建议使用前台服务、 Geofencing API 的元素(例如 GeofencingApi 接口)保证位置实时性。
  • 提醒窗口: 新增一个Window Type,TYPE_APPLICATION_OVERLAY,显示在 TYPE_PHONE ,TYPE_PRIORITY_PHONE ,TYPE_SYSTEM_ALERT ,TYPE_SYSTEM_OVERLAY ,TYPE_SYSTEM_ERROR … 这些窗口之上。TYPE_APPLICATION_OVERLAY感觉是google 专门用来给开发者做悬浮窗的。
  • ANDROID_ID: 算法做了改进,不再是一成不变;ANDROID_ID 的值现在将根据应用签署密钥和用户确定作用域。应用签署密钥、用户和设备的每个组合都具有唯一的 ANDROID_ID 值。因此,在相同设备上运行但具有不同签署密钥的应用将不会再看到相同的 Android ID(即使对于同一用户来说,也是如此)。 (每个手机获取的Android_Id都不会一样了) 只要签署密钥相同(并且应用未在 OTA 之前安装到某个版本的 O),ANDROID_ID 的值在软件包卸载或重新安装时就不会发生变化。(安卓8.0以后才安卓的应用,只要应用的签名秘钥不变不会影响Android_Id,下次获取的值还是一样的) 即使系统更新导致软件包签署密钥发生变化,ANDROID_ID 的值也不会变化。 要借助一个简单的标准系统实现应用获利,请使用广告 ID。广告 ID 是 Google Play 服务针对广告服务提供的唯一 ID,此 ID 可由用户重置。
  • so库调用改动:Android 8.0 引入了名字空间概念,隔离应用使用的so库和系统so库;参考: https://blog.csdn.net/ztguang/article/details/78865170
  • 权限申请变更: 之前动态申请权限的时候,如果用户同意了某个权限的申请,系统会将该权限同组的所有权限都授予给应用。8.0开始只会授予申请的那个权限,不过之后如果应用在申请之前授权权限同组的权限时,系统会自动授予不会提醒用户进行授权。

其他参考官网文章:https://developer.android.google.cn/about/versions/oreo/android-8.0#me

 

你可能感兴趣的:(Android开发)