經常會有人問:有必要去研究Handler和Binder麼?
感覺工作中好像用不到呀。
以前開始學習Android的時候,有時候想研究源碼,研究一些Android底層原理,只能去翻書,或者向其他公司的大牛請教,一個疑問有時候會卡好幾天。
那時候只要瞭解四大組件、視圖、網絡請求,你就能拿到一份薪資豐厚的offer;當時,如果你要是精通Java基礎,知道如何處理OOM,組件生命週期原理,熟悉Android源碼、架構體系,進阿里騰訊都是很輕鬆。
現在,你只會這些再出去試試?
現在面試對Android開發者的要求越來越高了!尤其是阿里、頭條、騰訊等大廠,面試問的很多都是原理。
Android Framework的三大核心功能:
1、ActivityManagerService.Java:AMS 管理Android所有應用程序的四大組件;
2、PackageManagerService.Java:PMS 處理包管理相關的工作,常見的比如安裝、卸載應用等;
3、WindowManagerService.Java:WMS 爲所有應用程序分配窗口,並管理這些窗口。
衆所周知,程序代碼是死的,系統運轉是活的,各模塊代碼運行在不同的進程(線程)中,想要真正理解安卓的這幾大服務,勢必要掌握安卓的通信機制,而安卓最主要的兩個通信機制就是Handler和Binder。來來來,看看這幾道大廠關於Handler和Binder的面試真題,能不能答上來?
1、一個線程有幾個Handler?
2、Handler 內存泄漏原因?爲什麼其他的內部類沒有說過有這個問題?
3、爲何主線程可以new Handler?如果想要在子線程中new Handler要做些什麼準備?
4、子線程中維護的Looper,消息隊列無消息的時候的處理方案是什麼?有什麼用?
5、既然可以存在多個Handler往MessageQueue中添加數據(發消息時各個Handler可能處於不同線程),那它內部是如何確保線程安全的?
6、我們使用Message時應該如何創建它?
7、Looper死循環爲什麼不會導致應用卡死?
8、Binder有什麼優勢?(字節跳動)
9、Binder是如何做到一次拷貝的?(騰訊)
10、MMAP的原理講解;(騰訊)
11、爲什麼Intent不能傳遞大數據?(阿里)
12、描述AIDL生成的Java類細節;(字節跳動)
13、四大組件底層的通信機制;(字節跳動)
14、爲什麼Intent不能傳遞大數據?(阿里)
一線企業的app都是多線程和多進程的,而Android進程間通信機制就是Binder,原生的線程間通信則是Handler,Binder和Handler是瞭解安卓運行機制必須要掌握的一個知識點,更是一線企業面試必問的知識點!
看了這些問題,你克你都打上來麼?還會覺得沒有必要去研究Handler和Binder麼?