強強筆記之android Handler 簡解

andorid 的Handler是一個非常有用的機制,但通過源碼,我們可以發(fā)現(xiàn)Handler機制其實非常復雜错洁,對于初學者(例如我)來說,看源碼或是看那些關于Handler非常詳細的文章會容易搞混自己戒突,所以這是一篇關于Handler的簡解屯碴,主要是想讓讀者理解Handler,在接下來我會陸續(xù)發(fā)一些Handler的詳解。

首先我們來看一下官方的api:
A Handler allows you to send and process Message and Runnable objects associated with a thread’s MessageQueue. Each Handler instance is associated with a single thread and that thread’s message queue. When you create a new Handler, it is bound to the thread / message queue of the thread that is creating it – from that point on, it will deliver messages and runnables to that message queue and execute them as they come out of the message queue.
從這段話我們可知:Handler是一個在不同線程里發(fā)送和處理信息的機制膊存,也就是在不同線程里充當通訊兵的角色导而。

首先來看一下:

Paste_Image.png

我們要想點擊按鈕改變textview的文字(Hello World),我們初學者想到的一般是:

TextView  textView=(TextView)findViewById(R.id.textView);
public void HandlerClick(View v) {
             new Thread(new Runnable() {
            @Override
            public void run() {
                textView.setText("你想改啥就改啥");

            }
        }).start();
       }

但是通過運行我們可以發(fā)現(xiàn)—–運行錯誤8羝椤今艺!

這是為什么呢?這就關系到安卓的多線程問題了爵卒,安卓是不允許在ui線程之外訪問ui工具包的虚缎,我們可以這樣想,android中各自的線程都是獨立的技潘,textview在主線程中遥巴,自然輪不到其他線程擅自更改,你想要改只能建議我來改享幽,改不改還得看我心情!拾弃!那么是通過一個怎樣的機制建議我改一下textview呢值桩?相信大家都猜出了—-Handler!豪椿!

貼一下修改之后完整的代碼:

package com.example.hellotest;

import android.app.Activity;
import android.os.Handler;
import android.os.Message;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends Activity {

    TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView=(TextView)findViewById(R.id.textView);
    }
    public void HandlerClick(View v) {
         new Thread(new Runnable() {
            @Override
            public void run() {
                handler.sendEmptyMessage(100);

            }
        }).start();
    }

   Handler handler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what) {
                case 100:
                    textView.setText("你想改啥就改啥");
                    break;
            }
        }
    };
}

因為這是一篇簡解奔坟,所以我只簡單介紹一下上述代碼,詳細的歡迎看我的下一篇關于Handler的博客搭盾。

handler.sendEmptyMessage(100);
這個方法作用是傳遞信息咳秉,將100傳到主線程中(100只是隨便寫的數(shù)字,任何int類型數(shù)字都可以傳遞)鸯隅,要想傳遞字符串或者其他類型的數(shù)據(jù)也可以通過不同的方法傳遞

再來看下

public void handleMessage(Message msg){}
這個方法是接收信息澜建,我們姑且認為msg.what 是接收整型數(shù)據(jù)的吧,細心的你或許發(fā)現(xiàn)了還有msg.obj,msg.arg 等接收不同數(shù)據(jù)的代碼蝌以,這里留到下一篇在細細解讀炕舵。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市跟畅,隨后出現(xiàn)的幾起案子咽筋,更是在濱河造成了極大的恐慌,老刑警劉巖徊件,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件奸攻,死亡現(xiàn)場離奇詭異蒜危,居然都是意外死亡,警方通過查閱死者的電腦和手機睹耐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進店門舰褪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人疏橄,你說我怎么就攤上這事占拍。” “怎么了捎迫?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵晃酒,是天一觀的道長。 經常有香客問我窄绒,道長贝次,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任彰导,我火速辦了婚禮蛔翅,結果婚禮上,老公的妹妹穿的比我還像新娘位谋。我一直安慰自己山析,他們只是感情好,可當我...
    茶點故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布掏父。 她就那樣靜靜地躺著笋轨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪赊淑。 梳的紋絲不亂的頭發(fā)上爵政,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天,我揣著相機與錄音陶缺,去河邊找鬼钾挟。 笑死,一個胖子當著我的面吹牛饱岸,可吹牛的內容都是我干的掺出。 我是一名探鬼主播,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼伶贰,長吁一口氣:“原來是場噩夢啊……” “哼蛛砰!你這毒婦竟也來了?” 一聲冷哼從身側響起黍衙,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤泥畅,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后琅翻,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體位仁,經...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡柑贞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了聂抢。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片钧嘶。...
    茶點故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖琳疏,靈堂內的尸體忽然破棺而出有决,到底是詐尸還是另有隱情,我是刑警寧澤空盼,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布书幕,位于F島的核電站,受9級特大地震影響揽趾,放射性物質發(fā)生泄漏台汇。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一篱瞎、第九天 我趴在偏房一處隱蔽的房頂上張望苟呐。 院中可真熱鬧,春花似錦俐筋、人聲如沸牵素。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽两波。三九已至,卻和暖如春闷哆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背单起。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工抱怔, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人嘀倒。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓屈留,卻偏偏與公主長得像,于是被迫代替她去往敵國和親测蘑。 傳聞我的和親對象是個殘疾皇子灌危,可洞房花燭夜當晚...
    茶點故事閱讀 45,500評論 2 359

推薦閱讀更多精彩內容