Handler消息机制实现更新主UI

如下实现的是简单的更新主UI的方法,用Handler消息机制

将textview的内容每隔一秒实现num++

 

/*
 * handler消息机制
 * asynctask异步任务
 *
 * httpclient完成 android客户端向服务器传递数据:
 * get
 * post
 *
 * 主UI线程 : 负责创建UI,更新UI
 * 在android中UI操作不是线程 安全的,如果多个线程 并发的去操作同一个组件,
 * 可能导致线程 安全问题,为了解决这个问题,android制定了一个规则:
 * 只允许UI线程 来修改UI组件的属性。
 * 同时主UI线程 不也允许超过5秒以上的耗时操作,
 *
 * */

 

代码:

MainActivity.java

 1 package com.example.handler_test;
 2 
 3 import android.app.Activity;
 4 import android.os.Bundle;
 5 import android.os.Handler;
 6 import android.os.Message;
 7 import android.widget.TextView;
 8 
 9 public class MainActivity extends Activity {
10 
11     private TextView tv;
12     private static int num = 1;
13     private Handler handler;
14     public static final int UPDATE=1;
15 
16     
17     @Override
18     protected void onCreate(Bundle savedInstanceState) {
19         super.onCreate(savedInstanceState);
20         setContentView(R.layout.activity_main);
21         tv = (TextView) findViewById(R.id.tv);
22         
23         handler = new Handler(){
24             @Override
25             public void handleMessage(Message msg) {
26                 super.handleMessage(msg);
27                 switch(msg.what){
28                 case UPDATE:
29                     tv.setText(msg.getData().get("val")+"");
30                     break;
31                 }
32             }
33         };
34         
35         new Thread(){
36             public void run() {
37                 for(int i=0;i<16;i++){
38                     try {
39                         Thread.sleep(1000);
40                     } catch (Exception e) {
41                         e.printStackTrace();
42                     }
43                     Message msg = new Message();
44                     msg.what = UPDATE;
45                     Bundle bundle = new Bundle();
46                     bundle.putInt("val", num++);
47                     msg.setData(bundle);
48                     handler.sendMessage(msg);
49                 }
50             };
51         }.start();
52         
53     }
54 
55 }

 

activity_main.xml

 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:paddingBottom="@dimen/activity_vertical_margin"
 6     android:paddingLeft="@dimen/activity_horizontal_margin"
 7     android:paddingRight="@dimen/activity_horizontal_margin"
 8     android:paddingTop="@dimen/activity_vertical_margin"
 9     tools:context=".MainActivity" >
10 
11     <TextView
12         android:id="@+id/tv"
13         android:layout_width="wrap_content"
14         android:layout_height="wrap_content"
15         android:text="null" />
16 
17 </RelativeLayout>

 

posted @ 2016-03-15 13:04  UniqueColor  阅读(320)  评论(0编辑  收藏  举报