博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android学习笔记之线程中调用UI控件
阅读量:4502 次
发布时间:2019-06-08

本文共 1448 字,大约阅读时间需要 4 分钟。

  今天做了一个TCP和UDP通信的测试,其中使用到两个线程,一个用来监听tcp,另一个用来监听UDP.

首先在线程中使用死循环来时刻监听数据,Socket,ServerSocket,DatagramSocket这些就不说了,网上很多例子

在收到消息的时候我需要把消息推送到界面上,由于在线程中操作UI控件,百度了好几种方法,照抄来都用了一遍,其中很方便的View.Post 

UI控件基本都有这个功能,比如我在得到数据后要抛给界面,界面有个TextView叫TxtEdit

于是

TxtEdit.post(new Runnable(){
public void run(){ Log.d("UDP", "发送完毕,清空文本框"); SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String date=sdf.format(new java.util.Date()); TxtInfo.setText(TxtInfo.getText()+"\r\n"+date+"\t\r\n"+str); TxtEdit.setText(""); Toast.makeText(getApplicationContext(), "发送成功!", Toast.LENGTH_LONG).show(); } });

方法很简单,

TxtEdit.post(new Runnable(){
public void run(){// TODO 添加需要执行的界面操作 } });

另一种方法是用Handler

protected Handler    uiHandler=new Handler(){        @Override    public void handleMessage(Message msg)        {            Log.d("收到消息", "更新界面");            TxtInfo.setText(msg.obj.toString());            super.handleMessage(msg);                    }            };
View Code

当然,在收到消息的时候就需要向这个Handler发送一个消息了:

Message msg=new Message();msg.obj=TxtInfo.getText();//obj参数是需要处理的消息内容uiHandler.sendMessage(msg);

这样就返回主线程来处理消息了

Message有很多用法,参考

转载于:https://www.cnblogs.com/cnwhm/p/3596805.html

你可能感兴趣的文章
PHP底层的运行机制与原理
查看>>
ERP笔记3-数据库的版本化
查看>>
编译原理的思维导图
查看>>
关于Spring boot 中application.yml配置文件没有小绿叶图标的问题
查看>>
JAVA vs C++之速度二
查看>>
main函数中如何等待协程运行完毕
查看>>
JS小问题之——缓冲运动
查看>>
C#导出EXCEL方法总结
查看>>
【poj3342】 Party at Hali-Bula
查看>>
SCM基础之组织结构设计
查看>>
「OC」@property @synthesize和id
查看>>
(爱加密系列教程六)Android代码注入大揭秘
查看>>
ERP程序开发中遇到的六种错误
查看>>
Hibernate_拦截器与日志文件
查看>>
2-Sixteenth Scrum Meeting-20151216
查看>>
Visual Studio 2015、2013、2012、2010、2008、2005各版本下载+有效密钥激活
查看>>
Appium键盘操作
查看>>
常见排序
查看>>
jsp自动生成验证码
查看>>
射频识别技术漫谈(12)——三次相互认证【worldsing笔记】
查看>>