安卓中多线程间通信方式

摘要:
背景安卓开发中多线程间通信是比较常见的操作,现对常用的几种方式先进行一波简单的总结。

背景
安卓开发中多线程间通信是比较常见的操作,现对常用的几种方式先进行一波简单的总结。
一、通过handler方式

    Handler handler = new Handler() {
        @Override
        public void handleMessage(@NonNull Message msg) {
            Toast.makeText(MainActivity.this, "handleMessage", Toast.LENGTH_SHORT).show();
            Log.d(TAG, "handleMessage" + msg.what);
        }
    };
    new Thread() {
            @Override
            public void run() {
                for (int i = 0; i < 1000; i++) {
                    Message message = new Message();
                    message.what = 3;
                    handler.sendMessage(message);
                    try {
                        Thread.sleep(3000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }.start();

二、子线程中使用runOnUiThread方法

    TextView tv;
    

    tv = findViewById(R.id.tv);

    new Thread() {
            @Override
            public void run() {
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        tv.setText("子线程设置testView");
                    }
                });
            }
        }.start();

三、子线程中使用View.post(Runnable r) 方式

    TextView tv;

    tv = findViewById(R.id.tv);
    
    new Thread() {
            @Override
            public void run() {
                tv.post(new Runnable() {
                    @Override
                    public void run() {
                        tv.setText("子线程设置text");
                    }
                });
            }
        }.start();

四、通过AsyncTask(Deprecated,不推荐)

    TextView tv;

    tv = findViewById(R.id.tv);
    
    class MyAsyncTask extends AsyncTask {
        @Override
        protected Object doInBackground(Object[] objects) {
            for (int i = 0; i < 3; i++) {
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            return objects[0].toString();
        }

        @Override
        protected void onPostExecute(Object o) {
            super.onPostExecute(o);
            tv.setText(o.toString());
        }
    }

免责声明:文章转载自《安卓中多线程间通信方式》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇python 绘图 异常点绘制使用 ax.plot(abnormal_points['ds'], abnormal_points['y'], "rX", label='abnormal points')Shiro【自定义Realm实战】下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

pthread实现多线程查询(转)

导读:大多数网站的性能瓶颈不在PHP服务器上,因为它可以简单地通过横向增加服务器或CPU核数来轻松应对(对于各种云主机,增加VPS或CPU核数就更方便了,直接以备份镜像增加VPS,连操作系统、环境都不用安装配置),而是在于MySQL数据库。如果用 NoSQL 数据库,也许需要十次查询,才能处理完同样地业务逻辑。此时PHP多线程的作用非常明显,它可以同时执行...

android为什么不允许新开启一个线程来更新UI,而是用handler来更新界面

下面是快速创建一个新线程的方法: 第一种:直接创建子线程并启动new Thread() {@Overridepublic void run() {//这里写入子线程需要做的工作}}.start();第二种:先创建子线程,然后启动private Thread newThread; //声明一个子线程newThread = new Thread(new Run...

selenium+python-unittest多线程生成报告(转)

前言 selenium多线程跑用例,这个前面一篇已经解决了,如何生成一个测试报告这个是难点,刚好在github上有个大神分享了BeautifulReport,完美的结合起来,就能生成报告了。 环境必备: python3.6 : BeautifulReport不支持2.7 tomorrow : pip install tomorrow安装 Beautifu...

004-核心技术-netty概述、传统IO、Reactor线程模型

一、概述 1.1、原生NIO存在的问题   1)NIO的类库和API复杂,使用麻烦,需要熟练掌握Selector,ServerSocketChannel、SocketChannel、ByteBuffer等。   2)需要具备其他的额外技能,需要熟悉Java多线程编程,因为NIO涉及到Reactor模式,必须熟悉多线程和网络编程,才能写出高质量的NIO程序...

Linux/Android——input_handler之evdev (四) 【转】

转自:http://blog.csdn.net/u013491946/article/details/72638919 版权声明:免责声明: 本人在此发文(包括但不限于汉字、拼音、拉丁字母)均为随意敲击键盘所出,用于检验本人电脑键盘录入、屏幕显示的机械、光电性能,并不代表本人局部或全部同意、支持或者反对观点。如需要详查请直接与键盘生产厂商法人代表联系 .挖...

多线程中,ResultSet为空,报错空指针

最近在数据库查询数据时,由于数据量太大,使用了多线程,通过线程池建了好几个线程,然后调用了一个封装好的jdbc查询语句。 结果在多线程中,ResultSet报错空指针。 仔细查阅后,才发现多个线程访问了同一个connection,事务混乱,导致了空指针。 解决方法: 使用数据库连接池,这样一个线程各自使用一个connection,就不会有冲突了。...