[Android] 开发第四天
Android 应用的基本组件介绍:
Activity 和 View
Activity 是 Android 应用中负责与用户交互的组件。
View 是所有 UI 控件、容器控件的基类,View 组件就是 Android 应用中用户实实在在看到的部分。
View 组件需要放到容器组件中,或者使用 Activity 调用 setContentView() 将它显示出来。
setContentView() 方法可以接受一个 View 对象作为参数,或者使用资源ID。
Activity 为 Android 应用提供了可视化用户界面,如果该 Android 应用需要多个用户界面,就将包含多个 Activity,多个 Activity 组成 Activity 栈,当前活动的 Activity 位于栈顶。
Activity 可以使用 setTheme(int resid) 方法来设置其窗口的风格。
Service
Service 与 Activity 地位是并列的,它也代表一个单独的 Android 组件。它与 Activity 区别在于,Service 通常位于后台运行,它一般不需要与用户交互,因此 Service 组件没有图形用户界面。
BroadcastReceiver
BroadcastReceiver 是 Android 应用中的另一重要组件,它代表广播消息接收器。
作为监听器,它与普通事件监听器的不同是:它监听的事件源是 Android 应用中的其它组件,而不是程序中的对象。
使用 BroadcastReceiver 组件接收广播消息比较简单,开发者只要实现自己的 BroadcastReceiver 子类,并重写 onReceive(Context context,Intent intent) 方法即可。
当其它组件通过 sendBroadcast()、sendStickyBroadcast() 或 sendOrderedBroadcast() 方法发送广播消息时,如该 BroadcastReceiver 也对该消息”感兴趣“(通过 IntentFilter 配置),
BroadcastReceiver 的 onReceive(Context context, Intent intent) 方法将会被触发。
BroadcastReceiver 注册方法:
Java 中可以使用 Context.registReceiver()
xml 可以在 AndroidManifest.xml 中使用 <receiver ... /> 元素完成注册。
ContentProvider
对于 Android 应用而言,它们必须相互独立,各自运行在自己的 Dalvik 虚拟机实例中,如果这些 Android 应用之间需要实现实时的数据交换,就需要实现自己的 ContentProvider 。
常用场景:我们的程序要从联系人管理应用中读取联系人数据。
要实现 ContentProvider 时,需要实现如下抽象方法:
insert(Uri, ContentValues) 向 ContentProvider 插入数据。
delete(Uri, ContentValues) 删除 ContentProvider 中指定数据。
update(Uri, ContentValues, String, String[]) 更新 ContentProvider 中指定数据。
query(Uri, String[], String, String[], string) 从 ContentProvider 中查询数据。
通常与 ContentProvider 结合使用的是 ContentResolver,一个程序使用 ContentProvider 暴露自己的数据,另一个程序使用 ContentResolver 来访问数据。
Intent 和 IntentFilter
Intent 不是 Android 中的组件,但它经常用到,它是 Android 应用中不同组件之间通信的载体。当 Android 运行时需要连接不同的组件时,就需要使用 Intent 。
Intent 可以启动应用中另一个 Activity ,也可以启动 Service 组件,还可以发送一条广播消息来触发系统中的 BroadcastReceiver 。
也就是说 Activity 、Service 、BroadcastReceiver 三种组件之间的通信都以 Intent 为载体。
Intent 有两类:
显示 Intent :明确指定需要启动或触发的组件的类名。
隐式 Intent :只指定需要启动或者触发的组件应满足怎样的条件。
条件使用 IntentFilter 来实现。