最贊回答 / 慕粉18419213644
handler.postDelayed只是發送一條延時消息到消息隊列中,而程序的運行要不斷的從消息隊列中去取消息,所以第一條消息必須在主線程(UI線程)中加入,后面的更新消息會在子線程中 ?遞歸延時發送!
2016-04-14
最新回答 / 慕星北
不是,Handler只是攔截消息并處理,一般我們如果要更新UI信息,可以在主線程中直接更新,但是如果想要實現定時更新,就必然要重啟一個線程更新,而在子線程中不能直接對UI進行操作,所以需要通過Message進行消息傳遞,然后通過Handler去攔截處理,所以不論是在主線程和子線程中它都可以使用,它只負責處理.
2016-04-02
最贊回答 / someone_ikok
Android系統的消息隊列和消息循環都是針對具體線程的,一個線程可以存在(當然也可以不存在)一個消息隊列 和一個消息循環(Looper),特定線程的消息只能分發給本線程,不能進行跨線程,跨進程通訊。但是創建的工作線程默認是沒有消息循環和消息隊列的,如果想讓該線程具有消息隊列和消息循環,需要在線程中首先調用Looper.prepare()來創建消息隊列,然后調用Looper.loop()進入消息循環。一個Message經由Handler的發送,MessageQueue的入隊,Looper的抽取,又再一次地...
2016-03-22
最贊回答 / 柯文
在Android里可以這么理解,因為在android里你可以把UI界面當做主線程,你不能因為下載東西就一直顯示下載,用戶體驗不好,也不被google容許,所以你點擊下載就是開啟子線程去下載了,手機頁面該看什么你就看什么,等下載好子線程就發個message給handler它來更新UI,在你的手機界面顯示或彈出一個下載好了的消息,如果不用handler下載好了你也不知道,還得自己去看。Handler和Thread:子線程是不能更新UI的,所以用Thread開啟子線程后,如果需要更新UI,就通過Handler來...
2016-03-10
最新回答 / Jannina
這個跟message有什么關系?looper實例都還沒有,哪里來的Message?? ?@Override? ? public void run() {? ? ? ? mTid = Process.myTid();? ? ? ? Looper.prepare();? ? ? ? synchronized (this) {? ? ? ? ? ? mLooper = Looper.myLooper();? ? ? ? ? ? notifyAll();? ? ? ? }? ? ? ? Process.setTh...
2016-03-03
最新回答 / lingxi
前提得是你在create里面用findviewbyid找到TextVeiw,你要用變量名調用setText啊 不是用變量類型。即TextView a; a=(TextView)findViewById(...);然后a.setText(...)
2016-01-28
最新回答 / wendyyyy
一次是在主線程中,把myRunable添加到主線程消息隊列中,調用以后才能執行myRunable中的代碼;另一次是在myRunable中,用來實現循環添加自身到主線程消息隊列(遞歸),從而實現每隔一秒更新UI。
2016-01-12
最贊回答 / 北國VS飄雪
UI中第一次調用后,而后在MyRunnable中handler.postDelayed(MyRunnable,1000),一直循環調用MyRunnable的run方法,遞歸調用
2015-12-28