android沙箱機制,android 事件機制初探

 2023-11-19 阅读 24 评论 0

摘要:由于android中的view操作不是線程安全的(線程安全的方法或實例,可以在多個線程使用的情況下不出錯),所以android中使用了handler的機制。通過handler,可以將各個線程中的更新ui的請求,收集到ui線程進行處理。這其中涉及到的概念包括

由于android中的view操作不是線程安全的(線程安全的方法或實例,可以在多個線程使用的情況下不出錯),所以android中使用了handler的機制。通過handler,可以將各個線程中的更新ui的請求,收集到ui線程進行處理。這其中涉及到的概念包括handler, messagequeue, looper和thread。如果把這一過程比喻成工廠車間,那么message是一個個待加工處理的元件,looper是傳送帶,thread是為這個傳送帶供能的發動機,messagequeue則是處在傳送帶上的那一段message。處理完之后,message會通過dispatchMessage分發。

handler操作有兩種方法,一是用handler.sendMessage(msg), 二是用handler.post(runnable)。兩種方法有很多相似和相關之處。sendMessage系列的方法有三個,分別是sendMessage(msg), sendMessageDelayed(msg, millis), sendMessageAtTime(msg, millis), 其中第一個調用了第二個,第二個調用了第三個。第一個是直接發送message,所以將第二個方法里面的延遲時間設置為0。第三個方法中的時間,則是系統的絕對時間。而第三個方法有一個返回值,是一個enqueueMessage()的方法,目的就是講message放入消息隊列中。而handler操作的post方法,則是在其內先構造了一個message,然后將message.callback設置為此runnable,再調用了一個sendMessageDelayed()方法。

說到message的獲取,也有三種方法,分別是用new 構造, handler.obtainMessage(), Message.obtain(),三種,其中后兩者其實是一樣的,第二個方法內部調用了第三個message的靜態方法。

android沙箱機制,handler在創建的時候是自動與所在線程進行綁定的,而looper則不然。要綁定l過ooper,關鍵是兩個方法:looper.prepare(), looper.loop(). 之前遇到過一次,在一個新創建的線程中使用toast, 結果因為沒有綁定并啟動looper而出錯。looper與thread必須是一一對應的,如果在一個thread中試圖綁定兩個looper,也會報錯。并且它們兩者相互綁定,具體操作邏輯要看looper的源碼。

轉載于:https://www.cnblogs.com/jason31/p/9518747.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/5/179440.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息