zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    12_常用类
    MyBatis_02 框架
    MyBatis_01 框架
    正则表达式
    11_异常处理
    产品经理成长之路(非原创)
    【Java每日一题】20161115
    【Java每日一题】20161114
    【Java每日一题】20161111
    【Java每日一题】20161110
  • 原文地址:https://www.cnblogs.com/cnwhm/p/3596805.html
Copyright © 2011-2022 走看看