Handler原理
程序员文章站
2024-01-27 21:42:04
...
Handler使用方法:
---------------------Handler.sendMessage():此时更新UI的操作写在Handler的handleMessage方法中
改方式分为两种:
***新建Handler子类(内部类):***新创建Handler子类(继承Handler类) & 复写handleMessage()方法
class Mhandler extends Handler {
// 通过复写handlerMessage() 从而确定更新UI的操作
@Override
public void handleMessage(Message msg) {
// 根据不同线程发送过来的消息,执行不同的UI操作
// 根据 Message对象的what属性 标识不同的消息
switch (msg.what) {
case 1:
mTextView.setText("执行了线程1的UI操作");
break;
case 2:
mTextView.setText("执行了线程2的UI操作");
break;
}
}
}
public Handler mHandler = new Mhandler();
***匿名内部Handler子类:***在主线程中,通过匿名内部类创建Handler类对象
public Handler mHandler = new Handler(){
// 通过复写handlerMessage()从而确定更新UI的操作
@Override
public void handleMessage(Message msg) {
// 根据不同线程发送过来的消息,执行不同的UI操作
switch (msg.what) {
case 1:
mTextView.setText("执行了线程1的UI操作");
break;
case 2:
mTextView.setText("执行了线程2的UI操作");
break;
}
}
};
---------------------Handler.post(runnable) :此时更新UI的操作写在Runnable中
// 步骤1:在主线程中创建Handler实例
public Handler mHandler = new Handler();
// 步骤2:在工作线程中 发送消息到消息队列中 & 指定操作UI内容
new Thread() {
@Override
public void run() {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 通过psot()发送,需传入1个Runnable对象
mHandler.post(new Runnable() {
@Override
public void run() {
// 指定操作UI内容
mTextView.setText("执行了线程1的UI操作");
}
});
}
}.start();
Handler工作原理:
--------------Handler.post()与Handler.sendMessage()类似,区别在于:
Handler.post()不需外部创建消息对象,而是内部根据传入的Runnable对象 封装消息对象
Handler.post()回调的消息处理方法是:复写Runnable对象的run()
二者的具体异同如下: