一、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更新等涉及...