1,android四大组件
activity:负责与用户交互的组件,只能通过setContentView(View)来显示组件,View组件是所有UI控件、容器空间的基类。
Service:和activity地位并列,service通常位于后台运行,一般不需要与用户交互,因此Service,没有图形用户界面。
拥有自己独立的生命周期,Service组件通常用于为其他组件提供后台服务或其他组件的运行状态。
BroadCastReceiver:接收广播消息
* 本质上就是一种全局监听器,用于监听系统全局的广播消息;由于BroadCastReceiver是一种全局的监听器,
* 因此他可以非常方便的实现系统中不同组件之间的通信。例如,我们希望客户端程序与starService()方法
* 启动的Service之间通信,就可以借助BroadCastReceiver来实现;
*
* 启动BroadCastReveiver只需要两步:
* 1、创建需要启动的BroadCastReveiver的Intent(添加setAction(),和参数),
* 2、调用Context的sendBroadcast()、sendOrderedBroadcast()、sendStickyBroadcast()方法来启动指定的BroadcastReceiver;
* 发出一个广播intent后,所有匹配该intent的广播都有可能被启动;
* 指定该BroadCastReveiver能匹配的Intent的方式(两种)(也就是注册方法):
* 1、代码指定:调用BroadCastReveiver的Context的registerReveiver(BroadCastReveiver bs,IntentFilter inf)方法指定
* 2、在AndroidManifest.xml文件中使用<recriver.../>元素注册
*
* 注意:每次BroadCast发生后,系统会创建对应的BroadCastReveiver的实例,并自动触发他的onReceive()方法,onReceive()方法执行后,实例就会被销毁;此外onReceiver()方法中不能执行一些耗时操作,超过10秒会报ANR;如果需要在此方法中执行一些耗时操作,则需要考虑通过Intent启动一个Service来完成操作,不考虑使用新线程去完成好事操作,因为BroadCastReveiver的生命周期很短,可能出现子线程还没结束,BroadCastReveiver就已经退出了
* BroadCast广播分为两种:
* 1,普通广播:完全异步的,可以在同一刻被所有接受者接收到,消息传递的效率比较高,缺点不能将处理结果传递给下一个接收者
* 2、有序广播:接受者按预先声明的优先级依次接收BroadCast,优先级生声明在<Intent-filter.../>元素的android:priority中;
* 数越大级别越高,也可以调用IntentFilter的serPriority()进行设置
*
* Intent的几个重要属性:动作(Action),数据(Data),分类(Category),类型(Type),组件(Compent)以及扩展信(Extra)。
*在其<intent-filter>中声明了<action>,即目标action,如果我们需要做一个跳转的动作,就需要在Intent中指定目标的action,如下:
public void gotoTargetActivity(View view) {
Intent intent = new Intent("com.scott.intent.action.TARGET");
startActivity(intent);
}
* data和extras,即执行动作要操作的数据和传递到目标的附加信息:
* 分类(Category):要执行动作的目标所具有的特质或行为归类,应用主界面Activity通常有<category android:name="android.intent.category.LAUNCHER" />
* type:要执行动作的目标Activity所能处理的MIME数据类型
* component,目标组件的包或类名称
ContendProvider:实现跨应用数据交换。
实现ContendProvider时,需实现如下抽象方法:
(1)insert(Uri,ContentValues):向ContentValues插入数据;
(2)delete(Uri,ContentValues):删除ContentValues中指定数据;
(3)update(Uri,ContentValues,String,String[]):更新ContentValues中指定数据;
(4)query(Uri,String[],String,String[]):从ContentValues中查询数据;
Intent和IntentFilter:
Intent 不同组件之间通信的载体,当一个组件通过Intent表示了启动或触发另外一个组件的“意图”之后,意图可以分为 两类:
(1)显示Intent:明确指定需要启动或者触发的组件的类名;
(2)隐示Intent:只是指定需要启动或触发的组件应满足怎样的条件;