青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

life02

  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
  197 隨筆 :: 3 文章 :: 37 評論 :: 0 Trackbacks
http://blog.csdn.net/poechant/article/details/7371461

Android 開發之道(10)Handler本質簡析與使用實例

  • 作者:柳大·Poechant
  • 郵箱:zhongchao.ustc@gmail.com
  • 博客:blog.csnd.net/poechang
  • 日期:March 19th, 2012

1 Overview

先淺析本質太過抽象,還是先上 Handler 的最簡實例吧。

  • 功能:Android.os.Handler負責接收,并按計劃發送和處理消息;
  • 特點:處理消息是阻塞式的;
  • 本質:關于Handler的內部機制,及其與Looper的關系,請看本文的第三部分“消息處理機制的本質”。

2 Get Started

2.1 先創建一個 Handler 對象,

private Handler mHandler = new Handler();

但這樣的Handler是沒用的。不過先暫且不要管,往下面看。

2.2 向 Handler 的消息隊列發送數據

發送數據的動作是通過 sendMessage 完成的。

Message message = new Message();  
message.what = 1;

// 將消息發送到mHandler的消息隊列的最后
mHandler.sendMessage(message);

不過實際上,在 Handler 內部有一個 Looper 類,而消息隊列其實是 Looper 的一個成員。Handler 中的 mQueue 就是其成員 mLooper 的 mQueue。

2.3 處理消息隊列中的數據

Handler 可以根據 Message 中的 what 值的不同來分發處理,Handler 中提供了 handleMessage 來讓開發人員進行 Override。示例如下:

public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
// 所做的操作
break;
case 2:
// 所做的操作
break;
default:
// 所做的操作
}
};

完整的寫法,就是在創建 Handler 對象時如下:

private Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
// 所做的操作
break;
case 2:
// 所做的操作
break;
default:
// 所做的操作
}
};
}

2 計時器簡例

2.1 先創建一個任務類

Timer 和 TimerTask 是 Java 語言中的類,如果不熟悉,請看下面的例子及注視。

// 任務類
private class MyTask extends TimerTask{
@Override
public void run() {
// 創建要發送的消息
Message message = new Message();
message.what = 1;

// 將消息發送到mHandler的消息隊列的最后
mHandler.sendMessage(message);
}
}

使用方法很簡單,就是用 Timer 來作為容器:

// 創建用于執行任務類的Timer
Timer timer = new Timer();

// 1毫秒之后開始每隔5秒鐘執行一次MyTast
timer.scheduleAtFixedRate(new MyTask(), 1, 1000);

2.2 完整的例子

布局文件就省略了,源碼如下:

package com.sinosuperman.android;

import java.util.Timer;
import java.util.TimerTask;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
public class Test extends Activity {

//title為setTitle方法提供變量,這里為了方便我設置成了int型
private int mSecs = 0;

private Handler mHandler = new Handler(){
// 根據mHandler的消息隊列中的不同消息進行處理
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
// 所做的操作
updateTitle();
break;
}
};
};

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

// 創建用于執行任務類的Timer
Timer timer = new Timer();

// 1毫秒之后開始每隔5秒鐘執行一次MyTast
timer.scheduleAtFixedRate(new MyTask(), 1, 1000);
}

// 任務類
private class MyTask extends TimerTask{
@Override
public void run() {

// 創建要發送的消息
Message message = new Message();
message.what = 1;

// 將消息發送到mHandler的消息隊列的最后
mHandler.sendMessage(message);
}
}

// 處理消息所做的操作
public void updateTitle(){
setTitle("Michael's Timer: " + mSecs);
mSecs++;
}
}

3 消息處理機制的本質

3.1 Looper 與 Handler 的內部機制

Looper 中有一個 MessageQueue 的成員,Looper 中還有有一個 loop 函數用來對消息隊列進行循環。Looper 并不直接與 Handler 綁定,我們可以直接“玩弄” Looper,不過 Handler 讓我們“玩弄”她更容易一些。

Handler 本質上是一個工具類,其內部有 Looper 成員。我們通過 Handler 類完成消息的發送和處理、制定分發機制等等。

3.2 消息處理機制的本質

Handler 中封裝了 Looper 成員,Handler 中的消息隊列就是 Looper 中的消息隊列成員。Looper 中有消息的循環分發機制。下面介紹下內部的大致流程:

  1. 當將一個消息通過 sendMessage 交給 Handler 的時候,就是交給了 Looper;
  2. Looper 將消息發送到這個消息指定的 target,而這個“指定”的動作是在 Handler 內部完成的,就是指定為 Handler 自己。
  3. Looper 將這個消息發送給 target 的 dispatchMessage 函數處理,因為 Handler 指定了 target 是自己,所以就是 Handler 的dispatchMessage 函數。
  4. dispatchMessage 函數對該消息進行處理的時候,調用的是 handleMessage,就是由我們自己 override 的那個函數。

Reference

  1. http://weizhulin.blog.51cto.com/1556324/323922
  2. http://blog.csdn.net/Innost/article/details/6055793

-

轉載請注明來自“柳大·Poechant的CSDN博客”:blog.CSDN.net/Poechant

posted on 2012-03-20 14:04 life02 閱讀(386) 評論(0)  編輯 收藏 引用 所屬分類: android組件學習
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产在线精品一区二区夜色| 免费在线成人av| 国产精品成人一区二区三区吃奶| 久久精品道一区二区三区| 亚洲一区二区三区四区五区午夜| 亚洲高清不卡在线观看| 午夜精品区一区二区三| 亚洲欧美影院| 久久九九免费| 欧美成人免费网| 亚洲欧洲一区二区三区| 亚洲欧洲精品一区| 亚洲午夜视频在线| 香蕉国产精品偷在线观看不卡| 性做久久久久久| 美女脱光内衣内裤视频久久影院 | 亚洲人成精品久久久久| 亚洲高清网站| 中文精品视频| 欧美一区二区精美| 久久男人资源视频| 最近中文字幕mv在线一区二区三区四区| 欧美激情视频一区二区三区不卡| 亚洲国产精品一区二区第一页 | 亚洲最新视频在线| 亚洲线精品一区二区三区八戒| 欧美一级片久久久久久久| 久久亚洲捆绑美女| 最新日韩在线视频| 欧美一区二区三区免费在线看| 久久亚洲精品一区二区| 欧美日韩精品国产| 国产一区二区三区视频在线观看| 伊甸园精品99久久久久久| 亚洲欧洲另类国产综合| 久久精品官网| 亚洲国产欧美一区| 欧美一区国产一区| 欧美日韩精品欧美日韩精品 | 国产一区二区高清不卡| 亚洲三级影片| 国产欧美视频一区二区| 亚洲人成毛片在线播放女女| 久久精品二区| 亚洲一区免费观看| 欧美日韩在线精品一区二区三区| 在线观看中文字幕不卡| 欧美综合77777色婷婷| 一区二区三区偷拍| 国产精品乱码人人做人人爱| 国产美女精品| 在线中文字幕一区| 亚洲国产成人精品女人久久久 | 亚洲美女在线一区| 久久爱www久久做| 国产精品婷婷午夜在线观看| 免费欧美日韩国产三级电影| 99视频精品全部免费在线| 麻豆久久精品| 久久久久久夜| 韩国精品久久久999| 香蕉成人啪国产精品视频综合网| 一区二区三区免费网站| 欧美精品日日鲁夜夜添| 亚洲精品中文字幕在线| 另类激情亚洲| 蜜臀久久99精品久久久画质超高清 | 一区二区三区视频在线看| 六十路精品视频| 久久国产福利国产秒拍| 激情久久五月天| 免费短视频成人日韩| 午夜精品免费在线| 国产一区二区观看| 亚洲欧美综合精品久久成人| 亚洲一区成人| 好男人免费精品视频| 久久深夜福利免费观看| 久久婷婷国产综合国色天香| 亚洲国产精品精华液网站| 亚洲国产成人精品女人久久久| 欧美激情一区二区三级高清视频| 日韩午夜精品| 亚洲尤物在线视频观看| 精品电影一区| 91久久国产综合久久91精品网站| 欧美精品激情在线| 亚洲一区二区三区中文字幕在线 | 91久久国产综合久久91精品网站| 日韩一二三区视频| 亚洲国产精品一区二区久 | 久久激情视频| 欧美中在线观看| 亚洲欧洲免费视频| 亚洲伊人久久综合| 激情久久一区| 亚洲成色www8888| 欧美日本在线| 久久精品国产成人| 欧美 日韩 国产在线| 欧美亚男人的天堂| 欧美aa国产视频| 国产精品啊啊啊| 久久综合久久综合久久综合| 欧美成人日韩| 欧美在线一级视频| 欧美精品免费看| 久久精品视频在线看| 欧美成人精品在线视频| 午夜精品影院| 久久蜜桃精品| 欧美一级理论性理论a| 猫咪成人在线观看| 欧美伊人久久| 欧美三级电影一区| 欧美高清视频一区二区| 国产亚洲欧美日韩美女| 亚洲成人在线网| 黄色亚洲网站| 中文一区二区在线观看| 狠狠操狠狠色综合网| 日韩午夜激情电影| 亚洲激情av| 久久伊人一区二区| 久久噜噜噜精品国产亚洲综合| 欧美视频在线视频| 亚洲精品中文字幕在线| 久久久免费精品视频| 亚洲国产精品ⅴa在线观看| 国产老肥熟一区二区三区| 亚洲日本一区二区| 亚洲二区在线| 久久综合网络一区二区| 久久久www| 国产一区二区三区久久精品| 亚洲免费在线观看| 欧美一级免费视频| 国产精品一区二区你懂得| 亚洲国产高清一区| 亚洲激情欧美激情| 欧美成人一区二区三区| 欧美国产综合一区二区| 亚洲高清123| 麻豆精品91| 亚洲区第一页| 亚洲视频1区| 国产精品午夜av在线| 亚洲一区二区在线观看视频| 欧美一区二区大片| 国产在线精品二区| 美日韩精品视频| 亚洲人成久久| 亚洲一区二区三区四区视频| 国产精品免费网站在线观看| 亚洲欧美国产高清| 久久资源在线| 久久中文精品| 男女精品视频| 一区二区免费在线播放| 欧美体内谢she精2性欧美| 亚洲午夜久久久久久久久电影院 | 久久夜色精品国产噜噜av| 国产一区二区三区久久| 久久久久这里只有精品| 亚洲国产精品一区制服丝袜| 亚洲制服av| 影视先锋久久| 最新国产精品拍自在线播放| 亚洲高清av在线| 亚洲一区二区视频| 国产色视频一区| 老鸭窝亚洲一区二区三区| 亚洲人成网站777色婷婷| 亚洲午夜在线观看| 国内自拍一区| 欧美图区在线视频| 欧美一区二区福利在线| 欧美成人亚洲| 久久精品国产999大香线蕉| 亚洲人在线视频| 国产精品一区二区在线观看网站| 米奇777在线欧美播放| 亚洲午夜91| 亚洲国产精品久久久| 欧美一区日韩一区| 日韩天堂在线视频| 精品福利电影| 国产美女搞久久| 欧美日韩一区二区三区在线视频| 欧美制服第一页| 夜夜狂射影院欧美极品| 毛片精品免费在线观看| 亚洲视频免费在线| 91久久精品国产91性色| 国产亚洲毛片| 国产精品一区二区三区免费观看| 欧美激情国产日韩精品一区18| 欧美影视一区| 亚洲一区二区日本| 亚洲美女福利视频网站|