Android之Handle的使用原理解析

一,Handle的作用

  Handle的作用是什麼,其實Handle的作用與intent類似。只不過intent是實現Android四大組件之間的通信,而Handle是實現線程間的通信,例如:當子線程做一個耗時的操作的時候,我們並不知道他什麼時候做完,做完了也不知道,那麼,我們是不是需要一個東西來通知我們,讓我們知道呀,所以說,也就有了Handle的來源,沒有Handle這個東西,對我們來說,非常的麻煩。


二,Handle的消息機制原理

1.圖片解析:


2.內容解析:

目的:子線程下載圖片,完成後通知主線程更新UI;

1.主線程中有一個消息處理器Handle,被放在消息隊列message queue中;

2.主線程中有一個消息隊列存放消息;

3.主線程中有一個Looper(不斷循環消息隊列取消息),如果發現有新的消息,就把消息傳給消息處理器Handle,handle會調用handleMassage()處理消息。


3.具體實施

1.子線程利用handle發送消息到主線程中;

2.主線程中Looper不斷循環獲取新消息;

3.發現新消息調用handleMessage()處理消息;


三.示例代碼

package com.zengtao.classwork;


import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.ActionBarActivity;
import android.widget.ProgressBar;


public class MainActivity extends ActionBarActivity {
private ProgressBar pb; // 進度條
private int[] randData = new int[100]; // 數組
private int index = 0; // 索引
private int mProgressStaus = 0; // 設置進度條的長度
private Handler mHandler;


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


pb = (ProgressBar) findViewById(R.id.pb);


// 初始化handle,綁定在主線程中的隊列消息中
mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
// 接收消息
if (msg.what == 0x111) {
mProgressStaus = index;
pb.setProgress(mProgressStaus);
}
}
};
// 創建子線程,在子線程中處理耗時工作
new Thread() {
@Override
public void run() {
super.run();
while (index < 100) {
doWork();
Message msg = new Message();
msg.what = 0x111;
mHandler.sendMessage(msg);
}
}


}.start();
}


/**
* 模擬耗時工作(一定要在子線程中做)
* 
* @return 進度條的多少
*/
public int doWork() {
randData[index++] = (int) (Math.random() * 100); 
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
return index;
}
}

四:示例代碼註解

1.主線程中創建Handle對象

2.子線程中發送消息到隊列中

3.主線程looper獲取消息,利用handleMessage()方法處理




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章