围绕着这几个问题来看Android 的四大组件之一Service
1.Service的启动流程是怎样的?两种启动方式具体有什么区别?
2.Android 8.0+对后台Service究竟做了什么限制?对所有App一视同仁吗?
3.前台服务为什么不受限制?前台服务可以不弹前台通知吗?
4.JobService的机制是什么,为什么不受后台限制?
先来看第一个问题:
1.Service的启动流程是怎样的?
Service作为Android四大组件之一,其生命周期是通过system_server进程中的ActivityManagerService(AMS)管理的。
从
App端进程:
• ContextImpl
Context抽象类所有api的实现,是Service、Activity和其他组件base Context。
• ActivityThread
代表着App的主线程,是App的入口,Application、Activity、Service都在ActivityThread中创建,维护着该App所有运行中的Service实例。其中有一个IApplicationThread类型成员mAppThread,用于被AMS跨进程调用。
App端进程:
• ContextImpl
Context抽象类所有api的实现,是Service、Activity和其他组件base Context。
• ActivityThread
代表着App的主线程,是App的入口,Application、Activity、Service都在ActivityThread中创建,维护着该App所有运行中的Service实例。其中有一个IApplicationThread类型成员mAppThread,用于被AMS跨进程调用。
• Service
具体提供服务的Service,被ActivityThread管理。
• ServiceConnection
监听Service连接状态的接口,用于bindService。
AMS端:
• ActivityManagerService
四大组件的大管家,是Framework中极为重要的一个类。
• ActiveServices
AMS中管理Service的具体类。
• ServiceRecord
Service结构的具体描述。
• ServiceMap
描述了一个用户(App)的所有Service记录,主要用于检索。
• ConnectionRecord
Client端与Service端绑定的抽象描述。
网友评论