歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android --- Handler 多線程通信示例(ProgressBar)

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

日期:2017/3/1 10:23:23   编辑:Linux編程

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. import android.os.Message;
  3. public class SonThread extends Thread {
  4. private int i = 0;
  5. @Override
  6. public void run() {
  7. while (i < 100) {
  8. i = i + 10;
  9. Message msg = new Message();
  10. msg.arg1 = i;
  11. try {
  12. Thread.sleep(1000);
  13. } catch (InterruptedException e) {
  14. e.printStackTrace();
  15. }
  16. HandlerTestActivity.myHandler.sendMessage(msg);
  17. }
  18. if (i == 100) {
  19. HandlerTestActivity.myHandler.removeCallbacks(this);
  20. }
  21. }
  22. }
3、MainActivity代碼
  1. package com.bison;
  2. import android.app.Activity;
  3. import android.os.Bundle;
  4. import android.os.Handler;
  5. import android.os.Message;
  6. import android.widget.ProgressBar;
  7. public class HandlerTestActivity extends Activity {
  8. private ProgressBar progressBar;
  9. private SonThread myThread;
  10. public static Handler myHandler;
  11. public void init() {
  12. progressBar = (ProgressBar) findViewById(R.id.progressBar1);
  13. myThread = new SonThread();
  14. myThread.start();
  15. myHandler = new Handler() {
  16. @Override
  17. public void handleMessage(Message msg) {
  18. super.handleMessage(msg);
  19. progressBar.setProgress(msg.arg1);
  20. }
  21. };
  22. }
  23. @Override
  24. public void onCreate(Bundle savedInstanceState) {
  25. super.onCreate(savedInstanceState);
  26. setContentView(R.layout.main);
  27. init();
  28. }
  29. }

PS:沒有打上注釋,不過Handler的通信機制還是比較好理解的。

更多Android相關信息見Android 專題頁面 http://www.linuxidc.com/topicnews.aspx?tid=11

Copyright © Linux教程網 All Rights Reserved