关键词:四大组件 / Activity / Service / BroadcastReceiver / ContentPRovider
本次笔记主要梳理了四大组件的进一步认识,为今后更进一步了解四大组件的工作原理做个准备,温故知新、查漏补缺。
Android 四大组件中除了 BroadcastReceiver 以外,其它三种组件都必须只在 AndroidManifest 中注册,而 BroadcastReceiver 既可以在 Manifest 中注册也可以通过代码来注册。Activity、Service、BroadcastReceiver 需要借助 Intent 来调用,而 ContentProvider 无需借助 Intent。
强调一下 Service 的两种状态: 启动状态 —— 主要用于执行后台计算; 绑定状态 —— 主要用于其它组件和 Service 的交互; 这两种状态是可以共存的,既可以处于启动状态也可以同时处于绑定状态。
Intent intentService = new Intent(this, MyService.class);startService(intentService);Intent intentService = new Intent(this, MyService.class);bindService(intentService, mServiceConnection, BIND_AUTO_CREATE);来了解一下 Google 官方的说明:
对于 startService: Once started, a service can run in the background indefinitely, even if the component that started it is destroyed. Usually, a started service performs a single Operation and does not return a result to the caller. For example, it might download or upload a file over the network. When the operation is done, the service should stop itself. 用 startService 启动,这个 Service 不会跟随者启动它的 component 消减,而且原则上不能与 UI 互动;
对于 bindService: A bound service offers a client-server interface that allows components to interact with the service, send requests, get results, and even do so across processes with interprocess communication (ipC). A bound service runs only as long as another application component is bound to it. Multiple components can bind to the service at once, but when all of them unbind, the service is destroyed. 用 bindService 的情况下,此 service 可以跟 component 进行沟通,甚至可以做到 IPC
小结: bindService 和 startService 最主要的差别在于其本身的 LifeCycle 以及 bindService 可以用来做 IPC(可以让你的 service 和 UI 沟通)
当通过 send 方法来发送广播的时候,AMS 会查找出匹配的广播接收者并将广播发送给它们处理。 广播发送的几种类型有:普通广播、有序广播和粘贴广播;它们的发送/接收过程是类似的;
当 ContentProvider 所在的进程启动的时候,ContentProvider 的 onCreate 要先于 Application 的 onCreate 而执行,这在四大组件中是一个很少有的现象;
End.
Note by HF. Learn from 《Android 开发艺术探索》
新闻热点
疑难解答