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

Android 之Handle的使用原理理解

編輯:關於Android編程


Handle的使用,首先我們要明白一點,那就是Handle的用處,Handle是用來做什麼的,明白了這點,那麼我在來理解下面的內容。

一:接下來我來說明一下Handle的用途

Handle到底是什麼,我們為什麼要來使用Handle,Handle 其實跟Intent有點類似,這裡我直說類似,沒有說什麼是一樣的啊,這種話,不是我說的,intent是用來實現四大組件之間的通信用的,而Handle呢?這個它的用途就是實現線程之間的通信,例如:當子線程做一個耗時的操作的時候,我們並不知道他什麼時候做完,做完了也不知道,那麼,我們是不是需要一個東西來通知我們,讓我們知道呀,所以說,也就有了Handle的來源,沒有Handle這個東西,對我們來說,非常的麻煩。


二:Handle的消息機制原理

1.圖形展示

2.內部解析:目的(子線程中下載圖片,下載完成之後通知主線程更新ui)

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

2.在主線程中有一個MessageQueue 也就是消息隊列,存放消息

3.在主線程中也有一個Looper (不停的循環消息隊列取消息)如果有新的消息就將消息交給消息處理器,handle會調用其中的handleMessage處理消息


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()方法處理



以上便是handle的使用,以及原理的解析,寫的不明白的,請諒解,將此分享給大家,希望對你們有所幫助。


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