android线程间通信的四种实现方式

android线程间通信的四种实现方式1 通过 Handler 机制 privatevoido handler newHandler Overridepubl Messagemsg super handleMessag msg

1,通过Handler机制.

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(); }

主线程中定义Handler,子线程发消息,通知Handler完成UI更新,Handler对象必须定义在主线程中,如果是多个类直接互相调用,就不是很方便,需要传递content对象或通过接口调用。另外Handler机制与Activity生命周期不一致的原因,容易导致内存泄漏,不推荐使用。
 

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(); }

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://javaforall.net/204187.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午8:47
下一篇 2026年3月19日 下午8:48


相关推荐

  • DDOS 攻击防御-SYN 洪水攻击

    DDOS 攻击防御-SYN 洪水攻击本文章仅供学习交流一 环境配置攻击机 kali2021 1ip 192 168 0 255 255 0 靶机 contos7 6ip 192 168 0 255 255 0 条件 两机器要在同一局域网中 能相互访问 contos 开启 apche 服务二 信息收集 1 Traceroute 命令也可以对路由进行跟踪 2 使用 nmap 扫描 win7 进行信息收集 nmap 目标 ipexclude 排除目标 ip 扫描时排除指定 ipnmap iL 目标文

    2026年3月19日
    1
  • 谁有FlashFXP可用注册码

    谁有FlashFXP可用注册码 急用,谢了

    2022年7月26日
    7
  • VMware16NAT模式配置固定IP[通俗易懂]

    VMware16NAT模式配置固定IP[通俗易懂]文章目录前言一、NAT配置固定IP二、重启网卡结尾前言为什么要配置固定IP呀?这个很容易解释啊,因为配置集群要设置固定IP(主结点需要管理子结点,通过固定IP识别机器),因为你访问虚拟机方便(不固定IP访问前还需要先查下虚拟机当前分配IP,比较麻烦)等等。配置固定IP采用哪种网络配置方式呢,NAT,桥接?仅主机反正是不行的,不能联网啊。NAT也叫网络地址转换,通常它的名称为VMnet8,通过nat的连接方式可以使得虚拟机和真实机的网卡在不同的网段中,从而实现联网。而bridge也叫桥接,通常它的名称

    2022年6月29日
    71
  • django模型数据类型_盒子模型的基本属性

    django模型数据类型_盒子模型的基本属性模型中常用字段字段说明AutoField一般不需要使用这个类型,自增长类型,数据表的字段类型为整数,长度为11位BigAutoField自增长类型,数据表的字段类型为bigint,长度为2

    2022年7月28日
    10
  • C++ 类(深拷贝和浅拷贝)

    C++ 类(深拷贝和浅拷贝)文章概述 1 浅拷贝和深拷贝上一篇文章中 我们提到必要的时候必须手动的写拷贝构造函数 那什么是必要的时候 我们这篇文章分析 浅拷贝和深拷贝我们首先要知道默认拷贝构造函数可以完成对象的数据成员简单的复制 这也称为浅拷贝 对象的数据资源是由指针指向的堆时 默认的拷贝构造函数只是将指针复制 a 我们首先分析下面的代码为什么会出错 classTest private

    2026年3月17日
    2
  • Linux xsync命令脚本

    Linux xsync命令脚本在/bin/目录下创建xsync脚本如下:#!/bin/bash#1.判断参数个数if[$#-lt1]thenechoNotEnoughArguement!exit;fi#2.遍历集群所有机器forhostinmasternode1node2doecho====================$host====================#3.遍历所有目录,挨个发送forfilein$@do#4…

    2022年5月5日
    163

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号