Android-多线程通信
http://wangzhaoli.blog.51cto.com/7607113/1287545
http://www.cnblogs.com/codingmyworld/archive/2011/09/12/2174255.html
在android上创建一个新的线程,具备的条件。如下:
Handler(默认的构造方法是关联于创建它的线程上的Looper对象,也可以为其指定关联的Looper),
Looper(它寄生于线程上,可以由主线程创建出来的,或当前线程创建出来的,或HandlerThread线程创建出来的)
注意:
1.每个线程有且最多只能有一个Looper对象,它是一个ThreadLocal。
2.一个线程可以有多个Handler,但是只能有一个Looper!
Looper类:用于创建MessageQueue以及循环使用其中的Message,它寄生于线程上,是线程的成员。
创建Looper对象方法:
1.synchronized static Looper getMainLooper();//返回主线程上的Looper
2.static Looper myLooper();//返回当前线程关联的Looper对象。
3.HandlerThread thread = new HandlerThread("MusicService",
HandlerThread.NORM_PRIORITY);
thread.start();//只有start之后,才能获取Looper
// 获得新线程的looper对象
looper = thread.getLooper();
创建Handler对象方法:(需要为其指定关联Looper对象)
1. new Handler();//默认构造方法,关联到该线程和该线程上的Looper对象
2. new Handler(Looper looper);//为其指定关联的Looper对象。
Handler的用处。
1.handler可以在任意线程发送消息,这些消息会被添加到关联的MQ上
2.handler是在它关联的looper线程中处理消息的。
// 在单独线程中播放MP3文件 HandlerThread thread = new HandlerThread("MusicService", HandlerThread.NORM_PRIORITY); thread.start();//只有start之后,才能获取Looper // 获得新线程的looper对象 looper = thread.getLooper(); // 默认情况下,Handler的looper是创建它的线程里的 // 这里将新线程的looper传递给Handler handler = new ServiceHandler(looper);