Android组件---Service 篇

围绕着这几个问题来看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端绑定的抽象描述。

1.1 Service启动过程

1.1.1 startService

你可能感兴趣的:(Android组件---Service 篇)