Android --- Handler 多线程通信示例(ProgressBar)


1、修改main.xml文件

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout  
  3.     xmlns:Android="http://schemas.android.com/apk/res/android"  
  4.     android:orientation="vertical"  
  5.     android:layout_width="fill_parent"  
  6.     android:layout_height="fill_parent">  
  7.     <ProgressBar  
  8.         style="?android:attr/progressBarStyleHorizontal"  
  9.         android:id="@+id/progressBar1"  
  10.         android:max="100"  
  11.         android:progress="0"  
  12.         android:secondaryProgress="0"  
  13.         android:visibility="visible"  
  14.         android:layout_height="wrap_content"  
  15.         android:layout_width="match_parent"></ProgressBar>  
  16. </LinearLayout>  
2、声明子线程SonThread.java
  1. package com.bison;  
  2.   
  3. import android.os.Message;  
  4.   
  5. public class SonThread extends Thread {  
  6.     private int i = 0;  
  7.   
  8.     @Override  
  9.     public void run() {  
  10.         while (i < 100) {  
  11.             i = i + 10;  
  12.             Message msg = new Message();  
  13.             msg.arg1 = i;  
  14.             try {  
  15.                 Thread.sleep(1000);  
  16.             } catch (InterruptedException e) {  
  17.                 e.printStackTrace();  
  18.             }  
  19.             HandlerTestActivity.myHandler.sendMessage(msg);  
  20.   
  21.         }  
  22.         if (i == 100) {  
  23.             HandlerTestActivity.myHandler.removeCallbacks(this);  
  24.         }  
  25.     }  
  26. }  
3、MainActivity代码
  1. package com.bison;  
  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.ProgressBar;  
  8.   
  9. public class HandlerTestActivity extends Activity {  
  10.     private ProgressBar progressBar;  
  11.     private SonThread myThread;  
  12.   
  13.     public static Handler myHandler;  
  14.   
  15.     public void init() {  
  16.         progressBar = (ProgressBar) findViewById(R.id.progressBar1);  
  17.         myThread = new SonThread();  
  18.         myThread.start();  
  19.         myHandler = new Handler() {  
  20.   
  21.             @Override  
  22.             public void handleMessage(Message msg) {  
  23.   
  24.                 super.handleMessage(msg);  
  25.                 progressBar.setProgress(msg.arg1);  
  26.             }  
  27.         };  
  28.     }  
  29.   
  30.     @Override  
  31.     public void onCreate(Bundle savedInstanceState) {  
  32.         super.onCreate(savedInstanceState);  
  33.         setContentView(R.layout.main);  
  34.         init();  
  35.     }  
  36.   
  37. }  

PS:没有打上注释,不过Handler的通信机制还是比较好理解的。

更多Android相关信息见Android 专题页面 http://www.bkjia.com/topicnews.aspx?tid=11

相关内容