(1)线程的通信(四个对象):Handler、Looper、Message、MessageQueue;
Handler:处理着,负责Message的发送与处理,需要实现handleMessage(Message
msg)方法对特定的Message进行处理,Handler类的主要作用:1、在工作线程中发送
消息。2、在主线程中获取并处理消息。
Looper:消息泵,负责消息的循环,主线程中不用写,以默认使用,子线程要写出,必
须在new Handler对象前后进行Looper的prepare()和loop()。
Message:消息,其中包含了消息ID,消息处理对象以及处理的数据等
MessageQueue:消息队列,用来存放Handler发送的消息,并按照FIFO规则执行,存
放消息不是实际的保存,只是等待Looper的抽取。
Handler handler = new Handler(){
重写handleMessage();
}
Message msg = new Message();
msg.what = 411;
msg.arg1 = 1;
msg.arg2 = 2;
msg.obt = Object;
handler.sendMessage(msg);
(2)android四大组件
Activity:作为四大组件之一的Activity,必须要在AndroidManifest清单文件中进行
注册。如果没有配置,而又在程序中启动了该Activity,将抛出异常
(ActivityNotFoundException)。
一个Activity通常是一个单独的界面
Activity之间通过Intent进行通信
Service:用于在后台完成用户指定的操作,service分两种:
1、started(启动服务):当应用程序组件(如activity)调用startService()方法启
动服务是,服务处于started状态
2、bound(绑定服务):当应用程序组件调用bindService()方法,服务处于bound状态
。
Content Provider:提供一个应用程序的指定数据集提供给其他应用程序。其他应用程序可以通过ContentProvider类从该内容提供者中获取或存入数据。
实现数据共享。ContentProvider用于保存和获取数据,并使其对所有应用程序可见。这是不同应用程序间共享数据的唯一方式,因为android没有提供所有应用共同访问的公共存储区。
Broadcast Receiver:广播提供者;是为了实现系统广播而提供的一种组件,并且广播事件处理机制是系统级别的,当有广播事件产生时,Android操作系统首先告诉注册到其上面的广播接收器产生了一个怎么样的事件,每个接收器首先判断是不是我这个接收器需要的事件,如果是它所需要的事件,再进行相应的处理。
Broadcast注册方式:BroadcastReceiver用于监听被广播的事件(Intent),为了达到这个目的,BroadcastReceiver必须注册。
1、静态注册
静态注册方式的特点:不管该应用程序是否处于活动状态,都会进行监听。
<receiver
android:name=".CallReceiver"
android:enabled="true">
<intent-filter >
<action android:name="android.intent.action.PHONE_STATE"/>
</intent-filter>
</receiver>
2、动态注册
动态注册方式是在activity里面调用当前上下文对象的registerReceiver() 方法 来注册,和静态的内容差不多。一个形参是receiver对象,另一个是IntentFilter对象。而IntentFilter构造方法的参数是要接收的action。
动态注册方式特点:在代码中进行注册后,当应用程序关闭后,就不再进行监听。
MyReceiver receiver = new MyReceiver();
//创建过滤器,并指定action,使之用于接收同action的广播
IntentFilter filter = new IntentFilter("android.intent.action.PHONE_STATE");
//注册广播接收器
registerReceiver(receiver, filter);
启动服务Started Service和绑定服务Bound Service
(a)started service(启动服务)是由其他组件调用startService()方法启动的,这
导致服务的onStartCommand()方法被调用。当服务是started状态时,其生命周期与
启动它的组件无关,并且可以在后台无限期运行,即使启动服务的组件已经被销毁。
因此,服务需要在完成任务后调用stopSelf()方法停止,或者由其他组件调用
stopService()方法停止。
(b)使用bindService()方法启用服务,调用者与服务绑定在了一起,调用者一旦退出
,服务也就终止,大有“不求同时生,必须同时死”的特点。