Handler的使用(二)

2021-06-03 13:37:06 字數 1617 閱讀 3972

一、handler與執行緒

handler在預設情況下,實際上它和呼叫它的activity處於同乙個執行緒。

例如在handler的使用(一)示例1當中,雖然宣告了執行緒物件,但是在實際呼叫當中它並沒有呼叫執行緒的start()方法,而是直接呼叫當前執行緒的run()方法。

public class handleractivity extends activity

runnable r = new runnable() catch (interruptedexception e)

}};}

根據測試證明,他們使用的是同乙個執行緒。

activityid ---> 1

activityname ---> main

handlerid ---> 1

handlername ---> main

如果,將oncreate中的**改正如下,又會發生不同的結果

thread t = new thread();

t.start();

activityid ---> 1

activityname ---> main

handlerid ---> 8

handlername ---> thread-8

二、bundle的用法

示例2:乙個android應用程式,先列印activity當前使用的執行緒資訊,然後再建立乙個新執行緒,使用bundle儲存值,最後列印出bundle中儲存的值和執行緒的資訊。

public class bundlertest extends activity

class myhandler extends handler

//帶有looper引數的建構函式,表示當前的handler使用looper所在的執行緒處理訊息佇列

//把這個handler(myhandler)繫結在另乙個執行緒上,從訊息佇列中取訊息

public myhandler(looper looper)

@override

public void handlemessage(message msg)

}}

上面的程式公有兩個執行緒,乙個是activity(activityname ---> "main"),另乙個是handlerthread(threadname ---> "handler-thread") 

三、在新執行緒當中處理訊息的方法

1、在msg中可以使用arg1、arg2傳遞資料

2、可以使用msg.obj傳遞簡單資料

如:msg.obj = "abc";

取值:string s = (string) msg.obj; 

3、使用bundle傳遞大量資料

如:bundle b = new bundle();

b.putstring("name", "zhangsan");

b.putint("age", 12);

msg.setdata(b);

取值:bundle b = msg.getdata();

int age = b.getint("age");

string name = b.getstring("name");

如何使用Handler

1 完成定時任務 1 handle傳送訊息方式 handle有兩類傳送訊息的方式 一類是post 方法,該方法把乙個runnable物件傳送到訊息佇列,從而當訊息被處理時,能夠執行runnable物件 另一類是send 方法,該方法用於傳送乙個message型別的訊息到訊息佇列,當訊息被處理時,系統...

如何使用Handler

1 完成定時任務 1 handle傳送訊息方式 handle有兩類傳送訊息的方式 一類是post 方法,該方法把乙個runnable物件傳送到訊息佇列,從而當訊息被處理時,能夠執行runnable物件 另一類是send 方法,該方法用於傳送乙個message型別的訊息到訊息佇列,當訊息被處理時,系統...

Android入門 Handler的使用

handler的使用 android ui操作並不是執行緒安全的並且這些操作必須在ui執行緒中執行 對於這句話的理解,真是費了很大勁啊,現在來說說這句話的意思,就是對於主介面中的控制項的操作,比如button上的文字改變,textview中的內容改變,顯示toast,progressbar更新等涉及...