1. 什麼是android framework
說簡單點,Framework具體的工作也就是為android應用開發的開發人員提供了一系列的服務和API的介面。
能夠從源碼下載到編譯,到移植進開發板都能順利的完成" 你的這些經驗挺符合要求的啊,招聘信息里寫的"Android Framework"指的應該就是/frameworks/base,多數是java代碼。看樣子他們是在做Android設備,廠商一般是做移植,然後根據自己產品的特點可能會在frameworks及整個平台里加自己的擴展功能。
http://blog.csdn.net/coding_or_coded/article/details/6822029
2. Framework應用框架為什麼重要呢
對於絕大多數 Android 開發工程師來說,掌握Android Framework 一直是一個不光要熟練而且必須要精通的技能。Framework這個應用框架是Android開發中最基礎,但同時也是最重要的。Framework包含了Android IPC Binder機制、Handler消息機制、Dalvik VM進程系統、AMS、WMS和Package Manager Service等等。而這些類別里又包含很多小類,有許多的分支,每一個小類里還有很多小細節,這些都是Android開發工程師必須熟練掌握和精通的技能。
如果做成一個框架圖的話,就是下面這樣的:這只是一個簡單的框架圖,其實還有很多分支
很多大廠公司在面試的時候都會有很多的技術面試題,這是考察程序員必不可少的題目。
比方說:
1.Android中多進程通信的方式有哪些?
2.進程通信你用過哪些?原理是什麼?(位元組跳動、小米)
3.描述下Binder機制原理?(東方頭條)
4.Binder線程池的工作過程是什麼樣?(東方頭條)
5.Handler怎麼進行線程通信,原理是什麼?(東方頭條)
6.Handler如果沒有消息處理是阻塞的還是非阻塞的?(位元組跳動、小米)
7.handler.post(Runnable) runnable是如何執行的?(位元組跳動、小米)
8.handler的Callback和handlemessage都存在,但callback返回true handleMessage還會執行么?(位元組跳動、小米)
9.Handler的sendMessage和postDelay的區別?(位元組跳動)
10.IdleHandler是什麼?怎麼使用,能解決什麼問題?
11.為什麼Looper.loop不阻塞主線程?(騰訊)
12.Looper無限循環為啥沒有ANR(B站)
13.Looper如何在子線程中創建?(位元組跳動、小米)
14.Looper、handler、線程間的關系。例如一個線程可以有幾個Looper可以對應幾個Handler?(位元組跳動、小米)
15.如何更新UI,為什麼子線程不能更新UI?(美團)
16.ThreadLocal的原理,以及在Looper是如何應用的?(位元組跳動、小米)
17.Android 有哪些存儲數據的方式?
18.SharedPreference原理,commit與apply的區別是什麼?使用時需要有哪些注意?(騰訊)
19.如何判斷一個 APP 在前台還是後台?
20.如何做應用保活?
21.一張圖片100x100在內存中的大小?(位元組跳動)
22.Intent的原理,作用,可以傳遞哪些類型的參數?
然後會再擴展到和這些知識點相關的更深層次的知識點細節,直到問的你答不上來為止,以此來探尋你的技術邊際,這樣就能更深入地了解你的技術能力。
Android Framework重要性
Android Framework 開發雖然比較偏底層,圈子窄,但是能掌握一些原理的東西,可以觸類旁通,往應用層發展也可以,接下來我們看看Framework知識有多重要。舉幾個栗子,你或許就能清楚了。
像掉幀監控,函數插裝,慢函數檢測,ANR 監控,啟動監控,都需要對 Framework 有比較深入的了解,才能知道怎麼去做監控,利用什麼機制去監控,函數插樁插到哪裡,反射調用該反射哪個類哪個方法哪個屬性……
目前大公司的app開發都要基於模塊化、層次化、組件化、控制項化的思路來設計架構,而這一切的基礎都建立在Android Framework系統框架底層原理實現之上。
Binder是Android系統中最重要的組成
Binder是什麼呢?請看下圖,圖是最能清楚明了的直觀表達的工具
優勢描述
性能:只需要一次數據拷貝,性能上僅次於共享內存
穩定性:基於C/S架構,職責明確,架構清晰,因此穩定性好
安全性:為每個App分配UID,進程的UID是鑒別進程身份的重要標志
Android IPC Binder機制包含了 :Linux預備知識、傳統的Linux中IPC通信原理、Binder IPC通信原理和Binder Java層實現,這些裡面都各有好多小分支,小細節需要仔細的去學習掌握。
騰訊高級工程師Binder面試
1.為什麼 Android 要採用 Binder 作為 IPC 機制?
2.Binder到底是什麼?
3.Binder機制是如何跨進程的?
4.一次Binder通信的基本流程是什麼樣?
5.為什麼 Activity 間傳遞對象需要序列化?
6.四大組件底層的通信機制是怎樣的?
7.AIDL 內部的實現原理是什麼?
這些都是關於Binder機制面試時會問到的點。
Handler主要用於非同步消息的處理: 有點類似輔助類,封裝了消息投遞、消息處理等介面。當發出一個消息之後,首先進入一個消息隊列,發送消息的函數即刻返回,而另外一個部分在消息隊列中逐一將消息取出,然後對消息進行處理,也就是發送消息和接收消息不是同步的處理。 這種機制通常用來處理相對耗時比較長的操作。
2、為什麼要用handler?
為什麼要用handler?不用這種機制行不行?不行!android在設計的時候,就封裝了一套消息的創建、傳遞、處理機制,如果不遵循這種機制,就沒有辦法更新UI信息,就會拋出異常信息。
在android開發中,經常會在子線程中進行一些操作,當操作完畢後會通過handler發送一些數據給主線程,通知主線程做相應的操作。探索其背後的原理:子線程handler主線程其實構成了線程模型中的經典問題生產者-消費者模型。生產者-消費者模型:生產者和消費者在同一時間段內共用同一個存儲空間,生產者往存儲空間中添加數據,消費者從存儲空間中取走數據。
3. Android開發應用層需要了解 framework層嗎
不同的android版本,不同的framework實現,framework有近2億行代碼,版本越高,代碼行數越大,這個過程是很痛苦的。所以不要去學習和閱讀framework的源代碼。
閱讀它的源代碼,還不如去學英語,多看應用層的API,多看理財的書籍。
如果不做framework開發,做app開發的話,看了framework的代碼對app開發的幫助是很少的.
1、首先覺得你的題目和問題描述不太搭邊。你所說的復雜功能效果實際上幾乎都是應用層的,和framework不搭邊。因為如果只是做應用開發,那就完全依賴現成的基礎組件和介面,最多自定義一下組件和布局。你在網上找到的很流暢很美觀的現成組件都是別人自定義之後封裝的。別人能做,實際上你應該也能做。多看看別人的demo,試著對你不滿意的地方做點改進,總會有收獲。一旦覺得有點心得,記錄下來或者把你封裝的東西拿出來讓大家用用,一起討論討論,必然收獲更多。
2、關於framework,更多是做的應用層之下的系統層面的東西。比如電源管理、消息隊列、包管理等等,還包括對硬體的支持及系統提供給上層的硬體功能調用介面。framework的學習必然離不開不斷編譯rom和刷機。這就要求有耐心有時間有興趣。而且由於framework層多數模塊都是以JNI方式被調用的,因此你需要有比較扎實的C語言基礎,之少能看懂程序結構。除此之外,對你想要詳細研讀的模塊在應用層的應用需要有必要的理解。我剛開始看源碼的時候是從電源管理模塊開始看的,就是因為當時對android系統自帶的電源提醒方式以及電量通知不太滿意,想重新定義更多層級的提醒。剛開始也是一頭霧水,但還是硬著頭皮一點點啃。這個過程中,為了防止忘記之前看過什麼,所以又不斷對看過的源碼做注釋並做閱讀筆記。大概兩三個月,雖然了解得也比較淺顯,但是我的目的達到了。源碼之路漫漫,看個三五年都不一定敢說能夠整體吃透。雖如此,但只要有鑽研的方向和基本的能力,相信工作中遇到的framework層的改動應當還是能夠負擔得住的。
3、如果不想深入framework,其實你也可以做android系統應用的開發。這一步幾乎和上層應用開發差不多,不過可以調用的庫更豐富,許可權更高罷了。這個可以自己研究,參照android系統出場自帶的應用。
說了這些。希望能夠有點幫助。
4. android framework層是用於開發什麼
framework的開發比應用層就要煩的多啦。做應用在eclipse中就足夠了,用android系統中的控制項等工具,或者是自己寫個類來實現特定的功能。而framework層的開發,需要往源碼中添加代碼、xml、圖片、id等等數據,這個id可是費了我好大的勁才搞定的。在項目開始的一個半月里,我探索、嘗試了很多,現在把我的經驗分享出來。網上關於framework層的開發信息很少,多是靠自己。
最有效的方式就是分析android的源碼,看google是怎樣實現一個類的,以及類的層次。我現在看的主要是widget和app中的代碼,其他的還沒涉及。像View,ViewGroup,Activity,ActivityThread都是非常重要的類,也是代碼量很大的類,我只是大概地過了下,還沒有仔細分析過。
我花大力氣的地方是資源文件夾下values中幾個文件的作用。
attrs.xml中定義的是類的屬性,屬性是為了能在xml文件中被引用到,換句話說就是指定類中變數(也就是屬性的實際作用者)的值。這些屬性會在類的構造函數中用到。看過一兩個源碼就會明白,構造函數中的TypedArray其實就是屬性的數組,數組的成員會被賦給類里的成員,完成從xml的初始化。類的構造函數一般有三個,一個是Class(context),這個用於在代碼中創建一個類,所以只包含一個上下文;Class(context, attrs)和Class(context, attrs, defStyle)用於從xml創建類的情況。
styles.xml中是各個控制項的「樣式」,樣式由一個個屬性所組成。我們在編輯xml文件的時候,不同的類所能設置的屬性有共同的,也有不同的,都是由樣式來控制的。具體可以去看styles.xml這個文件的內容。
themes.xml其實也是樣式,只是適用的范圍大一點,這個我是參考網上別人的看法,自己還沒研究過。
ids.xml是公共的id,也就是對應用層可見的id,id是為了獲得xml中的對象而需要的參數,也就是Object = findViewById(R.id.id_name)中的id_name。這些值可以在代碼中用android.R.id引用到
public.xml描述的是為attr、id、drawable所指定的一個32的id值,這個值在current.xml文件中會被用到。
當我們對public.xml做了改動後,執行make update-api命令,相應的current.xml就會添加這些改動。因為這些值按類型被放在不同的段上,類型相同的必須連續存放,不指定id值的話系統會自動計算出下一個值。
添加id的方法:1)在ids.xml中添加公共id項,在public.xml中也添加相應的id項。這種辦法沒有兼容性,會與後面的版本產生沖突。
2)在ids.xml中添加公共id項,每一項前面加一行的注釋,這樣就不用在public.xml中添加相應的項了。源碼中是/** @hide */的形式,這樣current中就不會有相應的段了。
3)在自己寫的xml中,使用android:id = "@+id/id_name"的形式,就和在eclipse中一樣,搜一下會發現android源碼中也有這么用的,這樣ids.xml和public.xml都不用改,兼容性我還不確定。
上面這些希望能對大家有所幫助吧。
5. android 五大應用開發框架是什麼
android應用開發框架是 Application Framework,其系統架構由5部分組成,分別是:Linux Kernel、Android Runtime、Libraries、Application Framework、Applications。
1、Linux Kernel (Linux內核)
Android基於Linux 2.6提供核心系統服務,例如:安全、內存管理、進程管理、網路 堆棧、驅動模型。Linux Kernel也作為硬體和軟體之間的抽象層,它隱藏具體硬體細節而為上層提供統一的服務。
2、Android Runtime (運行庫)
Android包含一個核心庫的集合,提供大部分在Java編程語言核心類庫中可用的功能。每一個Android應用程序是Dalvik虛擬機中的實例,運行在他們自己的進程中。
Dalvik虛擬機設計成,在一個設備可以高效地運行多個虛擬機。Dalvik虛擬機可執行文件格式是.dex,dex格式是專為Dalvik設計的一種壓縮格式,適合內存和處理器速度有限的系統。 大多數虛擬機包括JVM都是基於棧的,而Dalvik虛擬機則是基於寄存器的。
3、Libraries (程序庫)
Android包含一個C/C++庫的集合,供Android系統的各個組件使用。這些功能通過Android的應用程序框架(application framework)暴露給開發者。
4、Application Framework (應用框架層)
通過提供開放的開發平台,Android使開發者能夠編制極其豐富和新穎的應用程序。開發者可以自由地利用設備硬體優勢、訪問位置信息、運行後台服務、設置鬧鍾、向狀態欄添加通知等等,很多很多。 開發者可以完全使用核心應用程序所使用的框架APIs。
應用程序的體系結構旨在簡化組件的重用,任何應用程序都能發布他的功能且任何其他應用程序可以使用這些功能(需要服從框架執行的安全限制)。這一機制允許用戶替換組件。
5、Applications(應用層)
Android裝配一個核心應用程序集合,包括電子郵件客戶端、SMS程序、日歷、地圖、瀏覽器、聯系人和其他設置。所有應用程序都是用Java編程語言寫的。Android本身是一套軟體堆迭(Software Stack),或稱為「軟體迭層架構」,迭層主要分成三層:操作系統、中間件、應用程序。
(5)安卓framework開發主要做什麼擴展閱讀
開發人員也可以完全訪問核心應用程序所使用的API框架。該應用程序的架構設計簡化了組件的重用;任何一個應用程序都可以發布它的功能塊並且任何其它的應用程序都可以使用其所發布的功能塊(不過得遵循框架的安全性限制)。同樣,該應用程序重用機制也使用戶可以方便的替換程序組件。
隱藏在每個應用後面的是一系列的服務和系統,其中包括;
豐富而又可擴展的視圖(Views),可以用來構建應用程序,它包括列表(lists),網格(grids),文本框(textBoxes),按鈕(buttons),甚至可嵌入的web瀏覽器。
內容提供器(ContentProviders)使得應用程序可以訪問另一個應用程序的數據(如聯系人資料庫),或者共享它們自己的數據
資源管理器(ResourceManager)提供非代碼資源的訪問,如本地字元串,圖形,和布局文件(layoutfiles)。
通知管理器(NotificationManager)使得應用程序可以在狀態欄中顯示自定義的提示信息。
活動管理器(ActivityManager)用來管理應用程序生命周期並提供常用的導航回退功能。
6. android框架師和androidframework工程師的區別
高級Android多媒體工程師
1.負責Android系統多媒體業務特性的需求分析、總體設計及關鍵模塊開發實現及調試定位;
2、負責攻關解決Android AudioSystem/OpenGL/圖形系統/多媒體並發等android系統級多媒體問題;
1. 具有2年以上Android多媒體系統問題解決經驗;
2. 熟悉AudioSystem/OpenGL/SurfaceFlinger等具體多媒體技術
高級Android Framework工程師
1.負責Android系統Framework及內核等系統框架層的需求優化分析、優化設計及關鍵模塊開發實現及調試定位
1.3年以上嵌入式系統 2.精通C/C++
高級Android瀏覽器工程師
1. 負責Android系統瀏覽器等移動互聯業務特性的需求分析、總體設計及關鍵模塊開發實現及調試定位;
2. 負責攻關解決Android Webkit問題及進行瀏覽器性能優化
1. 具有2年以上Android瀏覽器系統問題解決經驗;
2. 熟悉Webkit系統架構及問題定位方法;
3. 熟悉javascript/css等具體技術
ANDROID高級驅動軟體工程師
1、 ANDROID MediaFramework、HAL、 KERNEL中關鍵系統、關鍵外設的開發、軟體優化;
2、 負責ANDROIID關鍵技術問題的公關,性能優化等技術工作;
3、 協助培養、管理ANDIROID底層軟體開發團隊
1. 4年以上LINUX嵌入式驅動軟體開發經驗,以及3年以上Android手機底層軟體開發經驗
2. 有過在晶元裸板上面進行從零開始的Linux(Android)移植工作經驗;
3. 精通LINUX內核,具備多核處理器整機功耗優化的處理經驗,具備基於多核的內核異常問題處理經驗和有效手段;
4. 在Android系統下,有豐富的外設開發經驗,並熟悉音視頻多媒體框架
7. android framework具體工作是什麼
說簡單點,Framework具體的工作也就是為android應用開發的開發人員提供了一系列的服務和API的介面。
能夠從源碼下載到編譯,到移植進開發板都能順利的完成" 你的這些經驗挺符合要求的啊,招聘信息里寫的"Android Framework"指的應該就是/frameworks/base,多數是Java代碼。看樣子他們是在做Android設備,廠商一般是做移植,然後根據自己產品的特點可能會在frameworks及整個平台里加自己的擴展功能。