-
handler = new handler(Looper loop):創建handler對象的時候可以指定傳進來的loop,那么這個loop可以我們指定,那么他默認情況下就會用我們指定的loop往循環隊列里面查詢插入消息。查看全部
-
如果你在主線程中創建一個handler,并重寫他的handlerMessage方法,在這個handlermessage方法中不要做過多的耗時操作,否則會導致UI界面出現一種卡死狀態。查看全部
-
為什么點擊stop不能停止呢? Message message = new Message(); 實例化Message時,如果沒有設置Message的what值,將默認是0; 發送的代碼: case R.id.btn_send: handler.sendEmptyMessage(1); break; 除了第一次向主線發送的message的what值是1,循環中message的what值都是0; 將點擊停止事件改為 case R.id.btn_stop: handler.removeMessages(0); threadHandler.removeMessages(0); 就可以停止了查看全部
-
可以在HandlerThread中下載網絡圖片或者更新數據庫中的信息。這種情況下我們可以在不占用主線程的情況下更新我們一些比較耗時的操作。查看全部
-
new HandlerThread("handler thread")創建HandlerThread的同時起名為handler thread查看全部
-
HandlerThread避免多個線程運行時報空指針異常查看全部
-
handler消息機制的處理過程查看全部
-
Handler的原理是什么? 一:Handler封裝了消息的發送(主要包括消息發送給誰) Looper 1.內部包含一個消息隊列也就是MessageQueue,所有的Handler發送的消息都走向這個消息隊列 2.Looper.Looper方法,就是一個死循環,不斷的從MessageQueue取消息,如有消息就處理消息,沒有消息就阻塞 二:MessageQueue,就是一個消息隊列,可以添加消息并處理消息。 三:Handler也很簡單,nebula會跟Looper進行關聯,也就是說在Handler的內部可以找到Looper,找到了Looper也就找到了MessageQueue,在Handler中發送消息,其實就是向MessageQueue隊列中發送消息 總結:handler負責發送消息,Looper負責接收Handler發送的消息,并直接把消息回傳給Handler自己,MessageQueue就是一個存儲消息的容器查看全部
-
android為什么要設計只能通過Handler機制更新UI呢? 答:最根本的目的就是解決多線程并發的問題。 假設如果在一個Activity當中,有多個線程更新UI,并且都沒有加鎖機制,那么會產生什么樣子的問題? 答:更新界面錯亂。 如果對更新UI的操作都進行加鎖處理的話又會產生什么樣子的問題? 答:性能下降。 處于對以上目的的問題的考慮,android給我們提供了一套更新UI的機制,我們只需遵循這樣的機制就可以了。根本不用去關心多線程的問題,所以更新UI的操作,都是在主線程的消息隊列當中去輪詢處理的。查看全部
-
在handler.post(new Runnable(){ })中更新UI查看全部
-
handler.removeCallbacks(runnable):將消息整個handler中移除查看全部
-
message.sendToTarget():實際上還是調用了Message的sendMessage方法。查看全部
-
textView.setText(""+msg.obj)的msg.obj怎么知道調用Person的toString方法呢? xxx+"" 和 xxx.toString() 是一樣的;msg.obj=message.obj=person,當然調用person的toString方法查看全部
-
handlerMessage方法是用來接收到我們發送過來的消息。查看全部
-
postDelayed會延遲1秒首次顯示圖片查看全部
舉報
0/150
提交
取消