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

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>
            在线观看亚洲视频| 久久精品视频在线看| 欧美一二三区精品| 亚洲欧美日韩直播| 欧美在线日韩| 美女精品在线| 亚洲国产精品一区二区www在线| 欧美大秀在线观看| 老司机免费视频一区二区| 欧美成人dvd在线视频| 久久综合国产精品| 欧美日韩另类综合| 国产欧美视频在线观看| 激情婷婷久久| 中文精品在线| 久久精品亚洲一区二区三区浴池| 136国产福利精品导航网址应用| 欧美成人免费在线观看| 免费成人美女女| 国产精品video| 影音先锋在线一区| 亚洲欧美久久久久一区二区三区| 亚洲日韩中文字幕在线播放| 亚洲精品一区二区三区av| 亚洲网友自拍| 欧美韩国日本一区| 午夜欧美理论片| 欧美成人乱码一区二区三区| 国产欧美精品日韩区二区麻豆天美| 欧美久久视频| 国语自产精品视频在线看抢先版结局| 欧美午夜美女看片| 亚洲第一精品福利| 久久成人18免费观看| 亚洲日本免费| 久色成人在线| 一区二区三区在线观看视频| 亚洲一区激情| 亚洲高清在线精品| 久久激情视频免费观看| 国产精品分类| 中国av一区| 亚洲乱码视频| 欧美电影美腿模特1979在线看| 久久影院午夜片一区| 国产精品国产一区二区| 亚洲黄色有码视频| 久久午夜精品一区二区| 欧美一区二区播放| 国产婷婷色综合av蜜臀av| 午夜亚洲性色福利视频| 一本色道久久88综合日韩精品| 亚洲四色影视在线观看| 欧美黄色一区| 亚洲精品一区二区三区四区高清| 亚洲黄色在线| 欧美国产一区视频在线观看| 久久久成人精品| 一区久久精品| 亚洲高清在线观看一区| 欧美aa国产视频| 亚洲乱码视频| 一本大道久久a久久精二百| 欧美三级视频在线观看| 亚洲一区视频| 亚洲一区二区三区三| 国产免费亚洲高清| 午夜视频一区二区| 欧美一区二区日韩| 在线国产精品播放| 亚洲国产欧美在线| 欧美日一区二区三区在线观看国产免| 国产九九精品视频| 午夜亚洲性色视频| 欧美在线观看一区二区| 在线精品视频一区二区三四| 久久久蜜桃精品| 久久伊人一区二区| 亚洲美女精品久久| 亚洲网站视频福利| 韩日精品在线| 日韩视频免费在线| 国产日产高清欧美一区二区三区| 亚洲乱码日产精品bd| 一本久久综合亚洲鲁鲁五月天| 性欧美18~19sex高清播放| 国产亚洲a∨片在线观看| 久久综合五月| 欧美日韩国产天堂| 久久久久成人网| 欧美经典一区二区三区| 欧美一区二区视频网站| 六月婷婷一区| 性色一区二区三区| 欧美福利一区二区| 久久久国产精品一区二区三区| 一区二区三区久久久| 国产资源精品在线观看| 亚洲高清影视| 国产亚洲精品一区二555| 亚洲国产精品热久久| 国产麻豆精品视频| 亚洲日本一区二区三区| 国内一区二区在线视频观看| 亚洲美女在线视频| 亚洲国产导航| 欧美一级在线亚洲天堂| 亚洲少妇最新在线视频| 久久视频在线视频| 久久精品在线播放| 欧美午夜精品久久久久久久| 欧美成人精品三级在线观看| 国产精品久久久一区麻豆最新章节 | 欧美成人午夜影院| 亚洲欧美日韩国产中文 | 欧美在线国产精品| 99国产精品国产精品毛片| 久久av最新网址| 亚洲欧美日韩综合aⅴ视频| 欧美电影免费观看高清完整版 | 亚洲欧美国产一区二区三区| 久久亚洲精品一区| 羞羞答答国产精品www一本| 欧美精品一区二区三区四区 | 狠狠色丁香久久综合频道| 99热这里只有精品8| 一区二区国产日产| 欧美日韩国产一区二区三区| 欧美aa在线视频| 在线成人中文字幕| 卡通动漫国产精品| 蜜月aⅴ免费一区二区三区| 国产一级一区二区| 午夜精品久久久久久99热软件| 国产精品综合| 亚洲毛片一区| 制服丝袜亚洲播放| 国产精品久久久久久久久搜平片 | 欧美在线黄色| 欧美影片第一页| 国产日韩欧美一区二区三区在线观看| 久久精品99无色码中文字幕| 国产精品jizz在线观看美国| 99在线|亚洲一区二区| 亚洲午夜一级| 国产欧美一区二区三区久久人妖| 久久五月天婷婷| 伊人久久综合97精品| 久久综合久久综合九色| 亚洲高清色综合| 亚洲性感美女99在线| 国产精品永久免费在线| 久久精品99国产精品日本| 久久精品国产亚洲a| 亚洲风情在线资源站| 欧美日韩国产精品自在自线| 亚洲视频免费看| 久久亚洲欧美国产精品乐播| 亚洲电影天堂av| 欧美日韩精品一本二本三本| 亚洲性线免费观看视频成熟| 久久色在线观看| 一区二区三区精品久久久| 国产精品自拍视频| 免费久久久一本精品久久区| 99精品热视频只有精品10| 久久精品99国产精品酒店日本| 欧美日韩高清一区| 亚洲欧美另类在线| 久久伊人一区二区| 亚洲桃花岛网站| 亚洲第一网站免费视频| 欧美日韩综合精品| 久久亚洲精品网站| 亚洲欧美成人一区二区三区| 蜜桃精品一区二区三区 | 亚洲第一在线| 中文精品一区二区三区| 国内成+人亚洲| 欧美精品在线看| 久久国产精品久久精品国产| 亚洲激情网站| 老司机精品久久| 亚洲免费在线| 9久草视频在线视频精品| 国产在线播放一区二区三区| 欧美成人dvd在线视频| 欧美怡红院视频| 制服丝袜激情欧洲亚洲| 亚洲黄色成人| 欧美成人第一页| 狂野欧美激情性xxxx| 欧美一区不卡| 亚洲自啪免费| 国产精品99久久久久久www| 亚洲国产一二三| 亚洲第一中文字幕| 激情亚洲一区二区三区四区| 国产丝袜美腿一区二区三区| 国产精品久久久久久久午夜|