Android 之Handle的使用原理理解

來源:互聯網
上載者:User

Android 之Handle的使用原理理解


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

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

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


二:Handle的訊息機制原理

1.圖形展示

下載圖片,下載完成之後通知主線程更新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的使用,以及原理的解析,寫的不明白的,請諒解,將此分享給大家,希望對你們有所協助。


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.