Android中有多种方法可以实现其他线程与Main线程通讯

来源:互联网 发布:淘宝拍卖字画是真的吗 编辑:程序博客网 时间:2024/05/17 07:23

如何实现线程间通讯

在Android中有多种方法可以实现其他线程与Main线程通讯,我们这里介绍常见的两种。

1) 使用AsyncTask

     AsyncTask是Android框架提供的异步处理的辅助类,它可以实现耗时操作在其他线程执行,而处理结果在Main线程执行,对于开发者而言,它屏蔽掉了多线程和后面要讲的Handler的概念。你不了解怎么处理线程间通讯也没有关系,AsyncTask体贴的帮你做好了。不过封装越好越高级的API,对初级程序员反而越不利,就是你不了解它的原理。当你需要面对更加复杂的情况,而高级API无法完成得很好时,你就杯具了。所以,我们也要掌握功能更强大,更自由的与Main线程通讯的方法:Handler的使用。 

AsyncTask的使用方法见示例工程《EX10_02AsyncTask》 

2) 使用Handler

这里需要了解Android SDK提供的几个线程间通讯的类。

2.1 Handler

Handler在android里负责发送和处理消息,通过它可以实现其他线程与Main线程之间的消息通讯。

2.2 Looper

Looper负责管理线程的消息队列和消息循环

2.3 Message

Message是线程间通讯的消息载体。两个码头之间运输货物,Message充当集装箱的功能,里面可以存放任何你想要传递的消息。

2.4 MessageQueue

MessageQueue是消息队列,先进先出,它的作用是保存有待线程处理的消息。

     它们四者之间的关系是,在其他线程中调用Handler.sendMsg()方法(参数是Message对象),将需要Main线程处理的事件添加到Main线程的MessageQueue中,Main线程通过MainLooper从消息队列中取出Handler发过来的这个消息时,会回调Handler的handlerMessage()方法。 

Handler的使用方法见示例工程《EX10_03HandlerAndMsg》  

除了以上两种常用方法之外,还有几种比较简单的方法

3) Activity.runOnUiThread(Runnable)

4) View.post(Runnable)

    View.postDelayed(Runnable, long)

5) Handler.post

    Handler.postDelayed(Runnable, long) 



http://www.cnblogs.com/suiyc/archive/2011/06/04/2073218.html



原创粉丝点击