如下实现的是简单的更新主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>