android线程通信的几种方式_java多线程的实现方式

android线程通信的几种方式_java多线程的实现方式1,通过Handler机制.privatevoidone(){handler=newHandler(){@OverridepublicvoidhandleMessage(Messagemsg){super.handleMessage(msg);

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

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

这种方法更简单,但需要传递要更新的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://javaforall.net/184896.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 单片机串口发送数据_单片机烧录找不到串口

    单片机串口发送数据_单片机烧录找不到串口今天用stm32串口转232和工控机通信时,通过笔记本的串口助手与单片机和工控机通信时都很正常,收发都没有问题;但是一用单片机和工控机直接通信就出现通信故障,经过排查发现单片机老是接收到错误数据0X80;当时的波特率是115200,后来查找资料说这是MAX3232ESE-T芯片的极限通信速率了,果断把波特率降低为19200或者其他低于115200的波特率,错误数据就不在出现了;这个问题的很难发…

    2025年11月3日
    2
  • vmware中ubuntu虚拟机扩容

    vmware中ubuntu虚拟机扩容ubuntu硬盘扩容

    2022年4月7日
    105
  • ffmpeg安装教程_房间信号差怎么增强

    ffmpeg安装教程_房间信号差怎么增强FFMpeg安装步骤背景FFmpeg是什么1·FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源软件。采用LGPL或GPL许可证,提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec。2·FFmpeg一个领先的多媒体框架,具备解码,编码,转码,复用,解复用,流式传输,滤镜和播放等能力。3·它包含可供应用程序使用的libavcodec,libavutil,libavformat,libavfilter,libavdevi

    2025年11月6日
    2
  • sql server2008 r2 密钥

    sql server2008 r2 密钥sqlserver2008r2密钥Developer:PTTFM-X467G-P7RH2-3Q6CG-4DMYBEnterprise:JD8Y6-HQG69-P9H84-XDTPG-34MB

    2022年7月4日
    24
  • 两款免费、好用的数据库连接工具

    一、NavicateNavicat是一套快速、可靠的数据库管理工具,专为简化数据库的管理及降低系统管理成本而设。它的设计符合数据库管理员、开发人员及中小企业的需要。Navicat是以直觉化的图形用户界面而建的,让你可以以安全并且简单的方式创建、组织、访问并共用信息。1、安装步骤(1)解压navicat_premium12文件,得到安装文件和破解文件。(2)双击navicat12024_premium_cs_x64.exe安装文件,根据点击下一步安装完成,记住安装目录,安装完成后先不

    2022年4月4日
    334
  • java的异或_java中的异或

    java的异或_java中的异或一、异或介绍异或是一种基于二进制的位运算,用符号XOR或者^表示,其运算法则是对运算符两侧数的每一个二进制位,同值取0,异值取1。性质1、交换律2、结合律(即(a^b)^c==a^(b^c))3、对于任何数x,都有x^x=0,x^0=x4、自反性AXORBXORB=AXOR0=A二、异或使用异或运算最常见于多项式除法,不过它最重要的性质还是自反性:A^B^B…

    2022年10月4日
    1

发表回复

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

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