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

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>
            99精品国产热久久91蜜凸| 久久www成人_看片免费不卡| 欧美一级在线视频| 中文欧美日韩| 亚洲午夜久久久久久久久电影院| 亚洲欧洲日韩在线| 久久尤物电影视频在线观看| 欧美一区视频在线| 狼人天天伊人久久| 亚洲欧洲精品一区二区三区| 日韩一级片网址| 午夜精品福利一区二区蜜股av| 午夜精品亚洲| 毛片基地黄久久久久久天堂| 欧美成人69av| 国产精品久久久久久久久搜平片 | 午夜精品久久久久久久白皮肤| 日韩视频在线免费观看| 久久爱www| 国产精品欧美久久| 日韩视频在线一区二区三区| 久久久91精品| 亚洲私人影院| 欧美日韩高清在线一区| 久久精品国产v日韩v亚洲| 欧美国产日韩一二三区| 国产日产欧产精品推荐色| 99成人精品| 亚洲第一天堂av| 久久久久久久久久久久久久一区| 欧美日韩中文另类| 亚洲毛片播放| 91久久精品www人人做人人爽| 久久精品噜噜噜成人av农村| 国产日韩欧美亚洲| 欧美一区二区在线播放| 亚洲欧美成人精品| 国产欧美综合一区二区三区| 久久国产精品一区二区三区| 亚洲欧美国产精品va在线观看| 国产精品多人| 亚洲欧美中文日韩v在线观看| 日韩视频免费在线观看| 欧美午夜电影一区| 亚洲一区二区三区在线| 亚洲中字黄色| 永久域名在线精品| 亚洲国产精品久久久久久女王| 久久精品国产视频| 在线观看日韩国产| 亚洲午夜伦理| 亚洲第一区在线观看| 亚洲国产精品免费| 国产精品揄拍一区二区| 欧美成人精品一区| 欧美性做爰猛烈叫床潮| 久久日韩精品| 亚洲精品美女久久久久| 日韩视频一区| 亚洲电影免费在线| 亚洲国产精品久久久久| 亚洲一二三四久久| 亚洲精品看片| 欧美在线观看网址综合| 宅男噜噜噜66一区二区66| 欧美中文字幕在线播放| 欧美亚洲一区在线| 女仆av观看一区| 久久免费一区| 国产欧美日韩在线观看| 在线视频中文亚洲| 一区二区三区 在线观看视频| 久久久91精品国产| 久久精品国产欧美激情| 国产精品久久久久久久一区探花 | 91久久久国产精品| 一区二区在线看| 久久另类ts人妖一区二区| 欧美一级免费视频| 国产一区二区高清视频| 久久久久久综合| 欧美国产精品一区| 99在线|亚洲一区二区| 欧美无乱码久久久免费午夜一区| 宅男噜噜噜66一区二区| 久久99在线观看| 亚洲欧洲一二三| 欧美亚男人的天堂| 午夜精品视频在线观看| 久久综合色天天久久综合图片| 亚洲第一精品久久忘忧草社区| 欧美成人一区二区在线 | 国产人成精品一区二区三| 久久久www成人免费精品| 日韩午夜av电影| 国产美女精品在线| 欧美成年人网站| 久久福利影视| 亚洲精美视频| 乱码第一页成人| 一区二区三区四区蜜桃| 一区二区三区在线视频观看| 欧美日产在线观看| 久久黄色级2电影| 亚洲性图久久| 亚洲欧洲中文日韩久久av乱码| 欧美在现视频| 香蕉久久久久久久av网站| 中文久久精品| 一区二区激情视频| 亚洲毛片网站| 一区二区三区高清视频在线观看 | 久久久久免费观看| 香蕉久久夜色精品国产使用方法| 亚洲精品中文字幕女同| 亚洲欧洲日产国产综合网| 欧美激情二区三区| 亚洲欧洲一区二区三区在线观看| 美女成人午夜| 亚洲激情中文1区| 亚洲日韩视频| 亚洲午夜久久久| 欧美亚洲一区二区在线| 午夜精品视频在线| 久久精品九九| 欧美高清你懂得| 国产精品一区免费观看| 国内精品久久久久久 | 国产精品久久久久aaaa九色| 夜夜嗨一区二区三区| 一区二区高清| 久久久www| 美女图片一区二区| 最近看过的日韩成人| 一区二区三区久久精品| 久久久久国产精品一区三寸| 欧美激情视频给我| 国产午夜精品理论片a级探花| 亚洲国产精品激情在线观看| 亚洲一区二区动漫| 欧美福利视频一区| 午夜精品一区二区三区四区| 久久综合图片| 国产情人节一区| 亚洲免费在线视频| 亚洲精品国产日韩| 免费成人黄色av| 亚洲激情啪啪| 欧美成人自拍| 欧美成人午夜77777| 在线精品视频免费观看| 久久久久久伊人| 校园激情久久| 国内一区二区在线视频观看| 欧美中文字幕精品| 亚洲欧美日韩直播| 国产一区二区三区最好精华液| 久久精品视频免费播放| 久久riav二区三区| 影音先锋久久资源网| 久久人人97超碰人人澡爱香蕉| 性感少妇一区| 亚洲电影自拍| 亚洲国产女人aaa毛片在线| 久久亚裔精品欧美| 亚洲欧洲在线播放| 日韩视频―中文字幕| 国产精品自在线| 久久综合九色| 欧美日本国产| 久久精品国产清自在天天线| 欧美影片第一页| 亚洲精品亚洲人成人网| 在线亚洲一区观看| 亚洲综合色视频| 亚洲高清自拍| 亚洲欧美日韩电影| 亚洲视频一区二区在线观看| 欧美在线日韩在线| 亚洲在线观看免费| 欧美.日韩.国产.一区.二区| 午夜亚洲福利在线老司机| 欧美a级片网站| 久久免费偷拍视频| 国产视频一区在线观看一区免费| 亚洲国产经典视频| 亚洲电影免费在线| 久久国产免费| 久久综合影音| 激情婷婷亚洲| 久久久综合精品| 久久综合久久综合久久| 国产欧美一区二区精品性色| 亚洲午夜精品一区二区三区他趣| 99爱精品视频| 国产精品私拍pans大尺度在线| 一本色道久久综合亚洲精品高清 | 亚洲天堂成人在线观看| 欧美肥婆bbw| 一区二区三区高清视频在线观看|