四大组件适配
Android 应用的开发离不开 Android 四大组件的使用,Android 四大组件分别是:Activity,用于展示前台页面;Service,用于执行后台任务;BroadCast,用于组件之间的通信;ContentProvider,用于应用间数据的分享。
Activity启动方式适配
Activity 组件用于和用户进行交互,在 Android 9 版本中,系统对于应用进程的任务栈做了调整,Activity 组件是运行在任务栈(task stack)中,而其它三大组件 Broadcast、Service、ContentProvider不需要运行在任务栈中,由这些组件打开 Activity 时需要为这个 Activity 的运行指定一个新的任务栈,否则会导致应用崩溃,并抛出异常信息:
适配方法,在 Broadcast、Service、ContentProvider 这些组件中拉起 Activity,需要添加FLAG_ACTIVITY_NEW_TASK
标志,这样便会在拉起 Activity 的同时,创建出一个新的任务栈:
Service启动方式适配
Service 是 Activity 外最常用的组件之一,它承接着用户处理后台任务的需求,是一种长生命周期的,没有可视化界面,运行于后台的一种服务程序。在 Android 5.0 之后 google 出于安全的角度禁止了隐式声明 Intent 来启动 Service,隐式声明即是不通过指定 Service 包名和类名,而是通过Intent 过滤机制,设置 intent 的 action、dataType 等方式根据 intent 匹配规则来查找并调用 Service:
隐式启动 Service 会产生一个问题,就是传入的 action、dataType 可能会匹配到别的应用的后台服务上去,Service 是在后台运行的,不被用户所感知,因此通过隐式方式启动 Service 可能拉起的不是实际想要启动的服务,从而会产生错误。