android handler作用,Android Handler的使用

本文详细介绍了Android中Handler的作用,重点讲解了如何通过Handler实现线程间的消息传递,包括创建Handler对象、发送消息、处理消息以及使用what标识不同的消息。同时,还提到了使用Handler进行线程切换,以及post Runnable执行任务的方式。此外,还讨论了子线程创建Handler的注意事项,以及避免重复发送消息的策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Handler的最大作用就是线程的切换

Handler 对象既发送信息又处理消息

把一个消息从一个线程发送到另一个线程

//在主线程创建一个Handler对象。

//重写Handler的handleMessage方法,这个就是接收并处理消息的方法。

Handler handler = new Handler(){

@Override

public void handleMessage(Message msg) {

//msg就是子线程发送过来的消息。

}

};

//开启一个子线程

new Thread(new Runnable() {

@Override

public void run() {

//在子线程发送一个消息。

Message msg = new Message();

handler.sendMessage(msg);

}

}).start();

发送一个空消息

handler.sendEmptyMessage(what);

Message对象有一个Object类型的obj属性

Handler handler = new Handler(){

@Override

public void handleMessage(Message msg) {

Log.i(TAG,"Handler 发送过来的消息是:" + msg.obj);

}

};

new Thread(new Runnable() {

@Override

public void run() {

Message msg = new Message();

msg.obj = "我是消息数据";

handler.sendMessage(msg);

}

}).start();

使用 what 来标识消息

Handler handler = new Handler() {

@Override

public void handleMessage(Message msg) {

switch (msg.what) {

case 1:

Log.i(TAG, "第一个消息是:" + msg.obj);

break;

case 2:

Log.i(TAG, "第二个消息是:" + msg.obj);

break;

}

}

};

new Thread(new Runnable() {

@Override

public void run() {

Message msg1 = new Message();

msg1.obj = "第一个消息";

msg1.what = 1;

handler.sendMessage(msg1);

Message msg2 = new Message();

msg2.obj = "第二个消息";

msg2.what = 2;

handler.sendMessage(msg2);

}

}).start();

Handler还可以post一个Runnable

new Thread(new Runnable() {

@Override

public void run() {

//在子线程post一个Runnable对象

handler.post(new Runnable() {

@Override

public void run() {

//这里是消息处理的方法

//这里运行在主线程。

}

});

}

}).start();

子线程使用Handler

//声明Handler;

Handler handler;

new Thread(new Runnable() {

@Override

public void run() {

//创建当前线程的Looper

Looper.prepare();

//在子线程创建handler对象

handler = new Handler() {

@Override

public void handleMessage(Message msg) {

//这里是消息处理,它是运行在子线程的

}

};

//开启Looper的消息轮询

Looper.loop();

}

}).start();

mBanner.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

//在主线程发送一个消息到子线程

Message msg = new Message();

handler.sendMessage(msg);

}

});

退出消息轮询

Looper.myLooper().quit();

Looper.myLooper().quitSafely();

用指定的Looper来创建Handler

new Thread(new Runnable() {

@Override

public void run() {

//获取主线程的Looper

Looper looper = Looper.getMainLooper();

//用主线程的Looper创建Handler

handler = new Handler(looper) {

@Override

public void handleMessage(Message msg) {

//这里是运行在主线程的

}

};

}

}).start();

同一消息不能发两次

//同一个Message发送了两次

Message msg = Message.obtain();

handler.sendMessage(msg);

handler.sendMessage(msg);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值