在android中Handler类通常作为不同线程间通信的手段,既可以实现线程的互斥,也可以实现同步。
下面以一个简单的例子来说明如何实现两个线程间的通信。
import android.app.Activity;
import android.os.Bundle;
import android.os.Message;
import android.util.Log;
import android.os.Handler;
public class MyHandler extends Activity {
static final String TAG = "Handler";
static final int HANDLER_TEST = 1;
Handler h = new Handler(){
public void handleMessage (Message msg)
{
switch(msg.what)
{
case HANDLER_TEST:
Log.d(TAG, "The handler thread id = " + Thread.currentThread().getId() + " ");
break;
}
}
};
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "The main thread id = " + Thread.currentThread().getId() + " ");
new myThread().start();
setContentView(R.layout.main)
//此处为activity的主线程
}
class myThread extends Thread
{
//新创建的线程,通过Handler.sendMessage(Message msg);实现子线程与主线程间通信
public void run()
{
Message msg = new Message();
msg.what = HANDLER_TEST;
h.sendMessage(msg);
Log.d(TAG, "The worker thread id = " + Thread.currentThread().getId() + " ");
}
}
}
通过子线程和主线程间通信实现同步和互斥。
分享到:
相关推荐
文档详细介绍了Handler实现线程间通信过程中源码的实现机制,并对其中的Looper,MessageQueue,Message对象的初始化及sendMessage()通过sendMessageDelayed()和sendMessageAtTime()过程的操作机流程
通过自定义Handler、Looper、Message.浅析Android线程间通信原理
Looper和Handler实现UI线程和子线程的通信
在《Android Handler之消息循环的深入解析》中谈到了Handler是用于操作线程内部的消息队列,所以Handler可以用来线程间通信ITC,这种方式更加安全和高效,可以大大减少同步的烦恼,甚至都可以不用syncrhonized。线程...
每一个线程对应一个消息队列MessageQueue,实现线程之间的通信,可通过Handler对象将数据装进Message中,再将消息加入消息队列,而后线程会依次处理消息队列中的消息。 2. Message 初始化:一般使用Message.obtain()...
实现进度条自动滚动实例,使用到了Handler,thread,toast,消息队列,事务队列等方法,通过按钮控制进度条的运行,使用toast来提示当前状态信息。
一个简单的andriod多线程通信的例子
消息的类型,在Handler类中的handleMessage方法中得到单个的消息进行处理,在单线程模型下,为了线程通信问题,Android设计了一个Message Queue(消息队列), 线程间可以通过该Message Queue并结合Handler和Looper组件...
使用java实现安卓的handler消息机制,支持跨线程通信和发送延迟消息
利用viewpager控件和handler线程通信机制实现UI的更新,图片的轮播,可以自定义轮播时长,对ViewPager会有新的认知。
本篇文章小编为大家介绍,Android Handler主线程和一般线程通信的应用分析。需要的朋友参考下
测试Android主线程、子线程(thread、handlerThread、AsyncTask、timer)及线程间通信方式(handler、timetask、Runnable)的建立及工作过程
当你创建子线程时,你可以在你的子线程中拿到父线程中创建的Handler 对象,就可以通过该对象向父线程的消息队列发送消息了。由于Android要求在UI线程中更新界面,因此,可以通过该方法在其它线程中更新界面。 出于...
Handler在android里负责发送和处理消息。它的主要用途有(或者是干什么的): 1)执行计划任务,按计划(定时)发送... 2)线程间通信,把从其他线程中发送来的消息放入消息队列中,避免线程冲突(常见于更新UI线程)
andriod提供了 Handler 和 Looper 来满足线程间的通信。例如一个子线程从网络上下载了一副图片,当它下载完成后会发送消息给主线程,这个消息是通过绑定在主线程的Handler来传递的。 在Android,这里的线程分为有...
解决方法:Message Queue机制可以实现子线程与UI线程的通信。 该机制包括Handler、Message Queue、Looper。Handler可以把消息/Runnable对象发给Looper,由它把消息放入所属线程的消息队列中,然后Looper又会
Handler可以发送Messsage和Runnable对象到与其相关联的线程的消息队列。每个Handler对象与创建它的线程相关联,并且每个Handler对象只能与一个线程相关联。 Handler一般有两种用途:1)执行计划任务,你可以再预定的...