編輯:關於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的使用,以及原理的解析,寫的不明白的,請諒解,將此分享給大家,希望對你們有所幫助。
Android Studio中提供了非常方便的搜索工具,可以在編輯器的文件中使用,也可以在android輸出的日志中使用,用法都是一樣的.打開搜索工具欄一. 在當前編輯的
我們在一些項目中會用到自定義流式布局,我個人覺得流式布局將呆板的布局錯綜排列,來提升用戶體驗度.(還可以不辜負美工妹子們的期望,人家畢竟也辛辛苦苦設計半天)。今天終於有時
組件式開發,融入android**引言**在app中經常能看到底部彈出式菜單的應用,比如手機qq和微信中頭像的選擇。這一組件非常常用。所以,將這一組件進行封裝後,就可以
前言MVC、MVP、MVVP相信大家已經耳熟能詳了,作為Android最出名的三個框架,它們的應用是非常的廣泛。這篇博客就來簡單介紹下其中二種框架。也加強下自己對這方面的