Handler使用方法详解(含实例)

Handler使用方法详解(含实例)

0、目录

一、相关概念简介

二、使用方式

三、使用步骤

四、实例讲解

五、总结

一、相关概念简介

Handler是一套消息传递机制,通常的作用是在多线程的应用场景中,将子线程(工作线程)中需要更新UI的相关信息传递到主线程,从而实现工作线程对UI的更新。

二、使用方式

Handler的使用方式可以根据发送消息的方式不同而分为两种:

Handler.sendMessage()和Handler.post()

三、使用步骤

方式一,使用Handler.sendMessage()

在该使用方式中,因创建Handler的方式不同,又可分两种:创建Handler子类、使用匿名Handler内部类,但本质都是相同的,都是继承Handler类创建子类

一,创建Handler子类

1、自定义Handler子类,并重写handleMessage()方法

class mHandler extends Handler {

//重写handleMessage()方法

@Override

public void handleMessage(Message msg) {

super.handleMessage(msg);

//执行的UI操作

}

}

2、主线程中创建mHandler的实例

private mHandler mhandler = new mHandler();

3、在子线程中创建需要发送的消息对象

Message msg = Message.obtain();

msg.what = 1;

4、在子线程中通过Hander发送消息到消息队列

mhandler .sendMessage(msg);

5、启动子线程

二、使用匿名Handler子类

1、在主线程中通过匿名内部类创建Handler类对象

Handler mhandler = new Handler(){

//重写handleMessage()方法

@Override

public void handleMessage(Message msg) {

super.handleMessage(msg);

//执行的UI操作

}

};

2、在子线程中创建需要发送的消息对象

Message msg = Message.obtain();

msg.what = 1;

3、在子线程中通过Hander发送消息到消息队列

mhandler .sendMessage(msg);

4、启动子线程

方式二、使用Handler.post()方法

1、在主线程中创建Handler实例

private Handler mhandler = new Handler();

2、在子线程中使用Handler.post()

mhandler.post(new Runnable() {

@Override

public void run() {

//执行的UI操作

}

});

3、启动子线程

四、使用实例

方式一,使用Handler.sendMessage()

一,创建Handler子类

public class MainActivity extends AppCompatActivity {

TextView mTxtShowTest;

Button mBtn1, mBtn2, mBtn3;

// 2、在主线程中创建自定义Handler(mHandler)的实例

private mHandler mhandler = new mHandler();

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

mTxtShowTest = (TextView) findViewById(R.id.mTxtShowTest);

mBtn1 = (Button) findViewById(R.id.mBtn1);

mBtn1.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

new Thread(new Runnable() {

@Override

public void run() {

// 3、创建所需消息对象

Message msg = Message.obtain();

msg.what = 1;

//4、发送消息

mhandler.sendMessage(msg);

}

// 5、开启线程

}).start();

}

});

}

//1、自定义Handler子类,继承Handler,重写handleMessage()方法

class mHandler extends Handler {

@Override

public void handleMessage(Message msg) {

super.handleMessage(msg);

//执行的UI操作

mTxtShowTest.setText("新建Handler子类方法");

}

}

}

二、使用匿名Handler子类

public class MainActivity extends AppCompatActivity {

TextView mTxtShowTest;

Button mBtn1, mBtn2, mBtn3;

//1、在主线程中通过匿名内部类创建Handler类对象

private Handler mhandler2 = new Handler(){

@Override

public void handleMessage(Message msg) {

super.handleMessage(msg);

//执行的UI操作

mTxtShowTest.setText("匿名内部类方法");

}

};

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

mTxtShowTest = (TextView) findViewById(R.id.mTxtShowTest);

mBtn2 = (Button) findViewById(R.id.mBtn2);

mBtn2.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

new Thread(new Runnable() {

@Override

public void run() {

// 2、创建所需消息对象

Message msg = Message.obtain();

msg.what = 1;

//3、发送消息

mhandler2.sendMessage(msg);

}

//4、开启线程

}).start();

}

});

}

}

方式二、使用Handler.post()方法

public class MainActivity extends AppCompatActivity {

TextView mTxtShowTest;

Button mBtn1, mBtn2, mBtn3;

//1、在主线程中创建Handler的实例

private Handler mhandlerPost = new Handler();

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

mTxtShowTest = (TextView) findViewById(R.id.mTxtShowTest);

mBtn3 = (Button) findViewById(R.id.mBtn3);

mBtn3.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

new Thread(new Runnable() {

@Override

public void run() {

//2、在子线程中使用Handler.post()

mhandlerPost.post(new Runnable() {

@Override

public void run() {

//执行的UI操作

mTxtShowTest.setText("post方法");

}

});

}

//4、开启线程

}).start();

}

});

}

}

五、总结

本问主要介绍了Handler的使用方法,后面将继续介绍Handler的原理和源码分析。

参考:https://www.jianshu.com/p/f0b23ee5a922

相关推荐

详细步骤教你如何在微信中解散群聊
365bet线上攻略

详细步骤教你如何在微信中解散群聊

📅 08-11 👁️ 7146
顶配悍马 H10 报价为多少?
365bet-亚洲版官网

顶配悍马 H10 报价为多少?

📅 08-07 👁️ 4856
手机流量跑的太快了,下一个什么软件之类的可以省流量?