Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android開發(12)--多線程處理機制之Handler的使用方法

Android開發(12)--多線程處理機制之Handler的使用方法

編輯:關於Android編程

本文主要介紹Android的Handler的使用方法。Handler可以發送Messsage和Runnable對象到與其相關聯的線程的消息隊列。每個Handler對象與創建它的線程相關聯,並且每個Handler對象只能與一個線程相關聯。

Handler一般有兩種用途:1)執行計劃任務,你可以再預定的實現執行某些任務,可以模擬定時器。2)線程間通信。在Android的應用啟動時,會創建一個主線程,主線程會創建一個消息隊列來處理各種消息。當你創建子線程時,你可以再你的子線程中拿到父線程中創建的Handler對象,就可以通過該對象向父線程的消息隊列發送消息了

MainActivity.java


[java]
package com.example.thread; 
 
import android.os.Bundle; 
import android.os.Handler; 
import android.os.Looper; 
import android.os.Message; 
import android.app.Activity; 
import android.view.Menu; 
import android.widget.TextView; 
 
public class MainActivity extends Activity { 
 
    private TextView tv; 
 
    // 消息處理者  
    private Handler handler; 
 
    private static final int TURNTEXT = 1; 
 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        // setContentView(R.layout.activity_main);  
 
        System.out.println("主線程----" + Thread.currentThread().getName()); 
        tv = new TextView(this); 
        tv.setText("你好"); 
        setContentView(tv); 
 
        // 處理者  
        handler = new Handler() { 
 
            // handlerMessage方法處理handler發送的消息  
            @Override 
            public void handleMessage(Message msg) { 
                super.handleMessage(msg); 
                // msg.what操作獲取發送什麼消息,根據消息的標識,進行不同處理方式  
                int what = msg.what; 
                if (what == TURNTEXT) { 
                    tv.setText(System.currentTimeMillis() + ""); 
                } 
            } 
        }; 
         
        try { 
            //主線程 阻塞 6s  大於   
            Thread.sleep(10000); 
        } catch (InterruptedException e1) { 
            // TODO Auto-generated catch block  
            e1.printStackTrace(); 
        } 
 
        //run方法執行完畢 線程就死掉  
        new Thread(new Runnable() { 
 
            @Override 
            public void run() { 
                while (true) { 
                    try { 
 
                        System.out.println("子線程----" 
                                + Thread.currentThread().getName()); 
                        Thread.sleep(1000); 
                        // 發送消息 what標識  
                        handler.sendEmptyMessage(TURNTEXT); 
                    } catch (InterruptedException e) { 
                        // TODO Auto-generated catch block  
                        e.printStackTrace(); 
                    } 
 
                } 
            } 
        }).start(); 
    } 
 
    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
         
        getMenuInflater().inflate(R.menu.main, menu); 
        return true; 
    } 
 

package com.example.thread;

import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.app.Activity;
import android.view.Menu;
import android.widget.TextView;

public class MainActivity extends Activity {

 private TextView tv;

 // 消息處理者
 private Handler handler;

 private static final int TURNTEXT = 1;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  // setContentView(R.layout.activity_main);

  System.out.println("主線程----" + Thread.currentThread().getName());
  tv = new TextView(this);
  tv.setText("你好");
  setContentView(tv);

  // 處理者
  handler = new Handler() {

   // handlerMessage方法處理handler發送的消息
   @Override
   public void handleMessage(Message msg) {
    super.handleMessage(msg);
    // msg.what操作獲取發送什麼消息,根據消息的標識,進行不同處理方式
    int what = msg.what;
    if (what == TURNTEXT) {
     tv.setText(System.currentTimeMillis() + "");
    }
   }
  };
  
  try {
   //主線程 阻塞 6s  大於
   Thread.sleep(10000);
  } catch (InterruptedException e1) {
   // TODO Auto-generated catch block
   e1.printStackTrace();
  }

  //run方法執行完畢 線程就死掉
  new Thread(new Runnable() {

   @Override
   public void run() {
    while (true) {
     try {

      System.out.println("子線程----"
        + Thread.currentThread().getName());
      Thread.sleep(1000);
      // 發送消息 what標識
      handler.sendEmptyMessage(TURNTEXT);
     } catch (InterruptedException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
     }

    }
   }
  }).start();
 }

 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
  
  getMenuInflater().inflate(R.menu.main, menu);
  return true;
 }

}


 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved