文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

android中有哪些实现线程间通信的方法

2023-06-15 00:56

关注

这篇文章给大家介绍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());        }    }

Android是什么

Android是一种基于Linux内核的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由美国Google公司和开放手机联盟领导及开发。

关于android中有哪些实现线程间通信的方法就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯