Android学习笔记之线程中调用UI控件

  今天做了一个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()+"
"+date+"	
"+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有很多用法,参考http://www.cnblogs.com/over140/archive/2011/06/24/2088637.html

原文地址:https://www.cnblogs.com/cnwhm/p/3596805.html