Android(安卓)开发 —— Android四大组件
-- Android 四大组件:
Activity、Service、BroadcastReceiver 和 ContentProvider
Android 的其中三大组件 Activity、Service 和 ContentProvider 都必须在 AndroidManifest 中注册。
而对于 BroadcastReceiver 来说,它既可以在 AndroidManifest 中注册,也可以通过代码来注册。
在调用方式上,Activity、Service、和 BroadcastReceiver 需要借助 Intent,而 ContentProvider 则无须借助 Intent 。
(1) Activity 是一种展示型组件,用于向用户直接地展示一个界面,并且可以接收用户的输入信息从而进行交互。
Activity 的启动由 Intent 触发,其中 Intent 可以分为显式 Intent 和 隐式 Intent,
-- 显式 Intent 可以明确地指向一个 Activity组件;
-- 隐式 Intent 则指向一个或多个目标 Activity 组件,当然也可能没有任何一个 Activity 组件可以处理这个隐式 Intent。
一个 Activity 组件可以具有特定的启动模式。
(2) Service 是一种计算型组件,用于在后台执行一系列计算任务。
Service 组件有两种状态:启动状态和绑定状态。
-- 当 Service 组件处于启动状态时,这个时候 Service 内部可以做一些后台计算,并且不需要和外界有直接的交互。
尽管 Service 组件是用于执行后台计算的,但是它本身是运行在主线程中的,因此耗时的后台计算仍然需要在单独的线程中去执行。
-- 当 Service 组件处于绑定状态时,这个时候 Service 内部同样可以进行后台计算,但是处于这种状态时外界可以很方便地和 Service 组件进行通信。
Service 组件也是可以停止的,停止一个 Service 组件稍显复杂,需要灵活采用 stopService 和 unBindService 这两个方法才能完全停止。
(3) BroadcastReceiver 是一种消息型组件,用于在不同的组件乃至不同的应用之间传递消息。
BroadcastReceiver 注册有两种方式:静态注册和动态注册。
-- 静态注册是指在 AndroidManifest 中注册广播,这种广播在应用安装时会被系统解析,此种形式的广播不需要应用启动就可以收到相应的广播。
-- 动态注册广播需要通过 Context.registerReceiver() 来实现,并且在不需要的时候要通过 Context.unregisterReceiver 来解除广播,
此种形式的广播必须要应用启动才能注册并接收广播,因为应用不启动就无法注册广播,无法注册广播就无法收到相应的广播。
(4) ContentProvider 是一种数据共享型组件,用于向其他组件乃至其他应用共享数据。
对于一个 ContentProvider 组件来说,它的内部需要实现增删改查这四种操作,在它的内部维持着一份数据集合,这个数据集合
既可以通过数据库来实现,也可以采用其他任何类型来实现,比如 List 和 Map,ContentProvider 对数据集合的具体实现并没有任何要求。
需要注意的是,ContentProvider 内部的 insert、delete、update 和 query 需要处理好线程同步,因为这几个方法是在 Binder 线程池中被调用的,
另外 ContentProvider 组件也不需要手动停止。
更多相关文章
- 如何在后台运行Linux命令?
- 事件分发系列—View中的dispatchTouchEvent和onTouchEvent分析
- Android事件处理(6)
- Android(安卓)在工作线程(非主线程)更改UI组件
- Android(安卓)Activity 生命周期
- Android(安卓)JNI 几个常用方法
- Android状态栏透明(沉浸式效果)
- Android(安卓)7.0 隐式广播-监听网络变化
- 手机锁屏后再解锁保存activity状态