【android,12】12.handler 与message机制更改界面信息

来源:互联网 发布:软件疲劳强度测试 编辑:程序博客网 时间:2024/04/26 11:31

使用消息机制修改界面的信息:

 

一、要修改view对象中显示的内容:

只有创建view对象的线程 才可以更新view对象里面的内容。

其实所有的view对象都是在主线程里面创建的 名字 main

所有的与ui相关的界面都是在主线程里面创建的.

 

二、业务需求:子线程每隔2秒要去修改view对象显示的内容:(要通过消息机制完成该操作):

 

三、更新view显示基本原理:

当子线程要更新view里的内容时,就让子线程发送一个消息给主线程,主线程再根据消息的内容进行操作。

主线程里面有消息队列(message queue),可以存放一组消息。并且还有一个轮询器,定期的轮询消息队列,查看是否有消息。如果发现有消息,;轮询器会把消息取出来。

在主线程中创建消息的处理者handler对象,用于处理在消息队列中取出的消息。

 

四、代码实现:

public class TestActivity extends Activity{

      

       privateTextView tv;

       //在主线程中创建handler对象(消息处理者)

       private Handler handler = new Handler(){

              //子线程发送消息触发的函数:

              public voidhandleMessage(Message msg) {

                    

                     super.handleMessage(msg);

                     String text =  (String) msg.obj; //获取消息的内容

                     tv.setText(text); //将内容设置给view对象。

              }    

       };

      

   @Override

   public void onCreate(Bundle savedInstanceState) {

       super.onCreate(savedInstanceState);

       setContentView(R.layout.main);

       tv = (TextView) this.findViewById(R.id.tv);

       System.out.println(Thread.currentThread().getName());

       

      // tv.setText("haha");

       

       //开启一个子线程 每个2秒 就把textview 里面的内容更改一下

   

       new Thread(){

              public void run() {

                      System.out.println("子线程 "+Thread.currentThread().getName());

                     for(int i=0;i<100;i++) {

                                   try{

                                          sleep(2000);

                                   }catch (InterruptedException e) {

                                          e.printStackTrace();

                                   }

                                   Messagemsg = new Message();//创建message对象。

                                   msg.obj= "haha"+i; //为消息设置值

                                   handler.sendMessage(msg);//使用handler在子线程中发送消息。

                                  

                            }

                    

              };

       }.start();

    }

}

1 0