android实现线程间通信的四种常见方式
作者:流星雨在线 发布时间:2022-08-20 13:11:17
标签:android,线程,通信
1,通过Handler机制
主线程中定义Handler,子线程发消息,通知Handler完成UI更新,Handler对象必须定义在主线程中,如果是多个类直接互相调用,就不是很方便,需要传递content对象或通过接口调用。 另外Handler机制与Activity生命周期不一致的原因,容易导致内存泄漏,不推荐使用。
private void one() {
handler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what){
case 123:
tv.setText(""+msg.obj);
break;
}
}
};
new Thread(){
@Override
public void run() {
super.run();
for (int i=0;i<3;i++){
try {
sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
Message message=new Message();
message.what=123;
message.obj="通过Handler机制";
handler.sendMessage(message);
}
}.run();
}
2,runOnUiThread方法
private void two(){
new Thread(){
@Override
public void run() {
super.run();
for (int i=0;i<3;i++){
try {
sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
runOnUiThread(new Runnable() {
@Override
public void run() {
tv.setText("通过runOnUiThread方法");
}
});
}
}.run();
}
用Activity对象的runOnUiThread方法更新,在子线程中通过runOnUiThread()方法更新UI,强烈推荐使用。
3,View.post(Runnable r) 、
private void three(){
new Thread(){
@Override
public void run() {
super.run();
for (int i=0;i<3;i++){
try {
sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
tv.post(new Runnable() {
@Override
public void run() {
tv.setText("通过View.post(Runnable r) 方法");
}
});
}
}.run();
}
这种方法更简单,但需要传递要更新的View过去,推荐使用
4,AsyncTask
private void four(){
new MyAsyncTask().execute("通过AsyncTask方法");
}
private class MyAsyncTask extends AsyncTask{
@Override
protected Object doInBackground(Object[] objects) {
for (int i=0;i<3;i++){
try {
sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return objects[0].toString();
}
@Override
protected void onPostExecute(Object o) {
super.onPostExecute(o);
tv.setText(o.toString());
}
}
来源:https://blog.csdn.net/liuxingyuzaixian/article/details/78893392


猜你喜欢
- 先说结论:字段类型更改为 'keyword'elasticSearch官方文档中创建index代码如下PUT /my_sto
- 1. 使用ApplicationEventPublisher 发布事件复制下面全部代码,右键包名,粘贴即可生成java类,执行即可看到效果。
- 1: Nacos搭建可以参考 https://www.jb51.net/article/196842.htmSpringCloud 版本&l
- 使用IDEA配置Maven搭建开发框架ssm教程一、配置Maven环境1.下载Maven:下载链接2.下载完成解压压缩包并创建本地仓库文件夹
- 配置宝塔面板javaweb运行环境详解,若出现404nignx错误也可按此教程进行检查1.准备:(解析成功的域名,本地运行完好的项目,宝塔面
- JDK JRE JVMJDK:Java标准开发包,它提供了编译、运行Java程序所需的各种工具和资源,包括Java编译器、Java运行时环境
- 在这一系列教程的最后一篇中,我想谈谈GR的EventBus,在处理多线程异步任务时是多么简单而有效。AsyncTask, Loader和Ex
- 实践过程效果代码/** * https://zhima.blog.csdn.net/ */public partial class Form
- jrebelJRebel是一套JavaEE开发工具。JRebel允许开发团队在有限的时间内完成更多的任务修正更多的问题,发布更高质量的软件产
- 本文实例讲述了Android编程使WebView支持HTML5 Video全屏播放的解决方法。分享给大家供大家参考,具体如下:1)需要在An
- 本文实例讲述了Spring的组合注解和元注解原理与用法。分享给大家供大家参考,具体如下:一 点睛从Spring 2开始,为了相应JDK 1.
- 本文实例讲述了winform绑定快捷键的方法。分享给大家供大家参考。具体分析如下:第一种:Alt + *(按钮快捷键)在大家给button、
- 本文讲述了Java获取彩色图像中的主色彩的实例代码。分享给大家供大家参考,具体如下:一:基本思路对于一张RGB色彩空间的彩色图像,很多时间我
- 1. 是否需要整合 ?不需要 : 单独使用Springmvc. 需要将原先Spring中的内容通通迁移到Springmvc中. 例如:数据源
- 前言:在我们使用C# WinForm中,我们有时候是需要或者自己本机的IP地址进行处理,今天我们学习一下如何使用C# Winform获取主机
- 实现方式通过挨个罗列的方式一次复制子对象是非常耗费人力的,如果子对象是引用类型,则还要需要考虑是否对子对象进一步深拷贝。实际应用中,一个类如
- 什么是接口:接口是一系列方法的声明,是一些方法特征的集合注意:在接口中只有方法名,没有方法体!关键字:interface(创建接口), im
- route_generator是什么这是一个简单的 Flutter 路由生成库,只需要少量的代码,然后利用注解配合源代码生成,自动生成路由表
- 第一种(java8):遍历JSONArray 拼接字符串public static void main(String[] args) {JS
- 一、队列的结构队列:一种操作受限的线性表,只允许在线性表的一端进行插入,另一端进行删除,插入的一端称为队尾,删除的一端称为队头通过 动态顺序