Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android之路之Handler的使用

android之路之Handler的使用

日期:2017/2/23 14:30:24      編輯:關於Android編程

Handler的作用一般是子線程向主線程中傳遞消息,用來主線程處理和UI相關的東西。為什麼要在子線程中用呢,因為如果主線程處理了過多耗時的東西,可能會導致假死,所以一般都放到子線程中去處理耗時的東西。

\

先看下上面的界面。就是這樣子,模擬一個耗時操作,然後下載完成後關閉對話框。

看下主Activity:

 

package com.howlaa.lesson27_handler;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.res.Resources;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.Button;

public class MainHandler extends Activity {
	
	 //聲明變量
    private Button b1;
    private ProgressDialog pd;
    
    //定義Handler對象
    private Handler handler =new Handler(){
            @Override
            //當有消息發送出來的時候就執行Handler的這個方法
            public void handleMessage(Message msg){
                    super.handleMessage(msg);
                    //只要執行到這裡就關閉對話框
                    pd.dismiss();
            }
    };

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main_handler);
		Resources res=  this.getResources();
        //查看UI組件所在的線程名
        Log.i("tag", "onCreate()-->"+Thread.currentThread().getName());
        //定義UI組件
        b1= (Button)findViewById(R.id.Button01);
        //給按鈕綁定單擊事件監聽器
        b1.setOnClickListener(new View.OnClickListener() {

                        @Override
                        public void onClick(View v) {
                                //點擊按鈕後去處理長耗時操作
                                processThread();
                        }
       });
	}
	
	private void processThread(){
		 //構建一個下載進度條
        pd= ProgressDialog.show(MainHandler.this, "下載文件", "正在下載……");
        Log.i("tag", "processThread()-->"+Thread.currentThread().getName());
        
        new Thread(){
            @Override
            public void run(){
                    Log.i("tag", "run()-->"+Thread.currentThread().getName());
                    //在新線程裡執行長耗時方法
                    longTimeMethod();
                    //執行完畢後給handler發送一個空消息
                    handler.sendEmptyMessage(0);
            }

        }.start();
	}
	
    //模擬下載文件的長耗時方法
    private void longTimeMethod(){
        try {
                Log.i("tag", "longTimeMethod-->"+Thread.currentThread().getName());
                    Thread.sleep(10000);
            } catch (InterruptedException e) {
                    e.printStackTrace();
            }
    }
	
	

}
layout界面就不需要貼啦。

 

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