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);

 

posted @ 2015-03-23 16:14  beyondbycyx  阅读(163)  评论(0编辑  收藏  举报