開源做為Android優(yōu)點的同時也是它的缺點,各種產(chǎn)商不同的硬件配置铅协、不同程度對Framework層接口或?qū)崿F(xiàn)的修改捷沸,早已讓很多應(yīng)用開發(fā)者頭疼。做好兼容一直是Android應(yīng)用開發(fā)的一件頭等要事狐史。想想在你的開發(fā)機上跑得歡的APK痒给,在老板的手機上莫名地崩潰了,老板會是什么臉色骏全?
因為某種“你懂的”原因苍柏,Android設(shè)備在國內(nèi)是無法使用Google提供的服務(wù)的,這也致使很多手機產(chǎn)商肆無忌憚對Android Framework層大修特修吟温,而且還不做CTS測試序仙,反正通過測試也用不了Google商店突颊。所以國內(nèi)手機產(chǎn)商生產(chǎn)的某些手機會存在某些奇怪的兼容性問題鲁豪,包括三星也有類似的問題潘悼。
在很多項目中,開發(fā)的大部份工作量并不是寫功能代碼爬橡,而是調(diào)式和修改兼容性問題治唤。在面試中,分辨一個開發(fā)是否有豐富的項目經(jīng)驗糙申,且在這些項目中是否承擔(dān)主要責(zé)任宾添,并不一定要問深入的知識,往往通過簡單的細(xì)節(jié)問題會更能確認(rèn)對方是否名副其實柜裸。
面試題:Android資源目錄的讀取順序缕陕?
Android資源文件可以定義在不同分辨率、屏幕方向疙挺、語言等(甚至還有夜間模式)扛邑,當(dāng)我們的應(yīng)用需要使用一個資源,這個資源(圖片铐然、Layout或者別的)可能在很多res下的子目錄中都存在蔬崩,那么Android系統(tǒng)是如何確認(rèn)使用哪一個資源呢?
可以先看一下官方文檔提供資源搀暑,了解清楚資源目錄的配置和命名規(guī)則沥阳。
這就是一個Android應(yīng)用的資源查找的順序問題,其實簡單說自点,在查找時會先去掉有沖突的資源目錄(上圖第1步)桐罕,然后再按MCC、MNC桂敛、語言等指定的優(yōu)先級進(jìn)行查找冈绊,直到確認(rèn)一個匹配資源。根據(jù)屏幕尺寸限定符選擇資源時埠啃,如果沒有更好的匹配資源死宣,則系統(tǒng)將使用專為小于當(dāng)前屏幕的屏幕而設(shè)計的資源。
圖片放錯目錄會產(chǎn)生的問題嗎碴开?
這一點可能很多人都不會注意毅该,覺得只要往一個drawable目錄中放了需要的資源就好了。而我們可以自己做一個簡單的測試潦牛,把同一個圖片資源放在不同的dpi目錄眶掌,會發(fā)現(xiàn)它們使用的內(nèi)存是不一樣的。簡單說就是高密度(density)的系統(tǒng)去使用低密度目錄下的圖片資源時巴碗,會將圖片長寬自動放大以去適應(yīng)高密度的精度朴爬,當(dāng)然圖片占用的內(nèi)存會更大。
所以如果能提各種dpi的對應(yīng)資源那是最好橡淆,可以達(dá)到較好內(nèi)存使用效果召噩。如果提供的圖片資源有限母赵,那么圖片資源應(yīng)該盡量放在高密度文件夾下,這樣可以節(jié)省圖片的內(nèi)存開支具滴。
mipmap
在使用Android Studio(應(yīng)該是從1.1版本開始)創(chuàng)建Android應(yīng)用項目時凹嘲,常常會看到系統(tǒng)把ic_launcher.png圖標(biāo)放在了mipmap-xxhdpi目錄下了。那么這個mipmap是什么意思呢构韵?和drawable的對應(yīng)dpi目錄有什么區(qū)別呢周蹭?
我們知道,drawable文件夾是存放一些xml(如selector)和圖片疲恢,Android會根據(jù)設(shè)備的屏幕密度(density)自動去對應(yīng)的drawable文件夾匹配資源文件凶朗。
那么mipmap這個目錄有什么用呢?
MIP來源于拉丁文中的multum in parvo显拳,意為在一個小空間里的多數(shù)俱尼。MIP map(有時候拼寫成mipmap)是一種電腦圖形圖像技術(shù),用于在三維圖像的二維代替物中達(dá)到立體感效應(yīng)萎攒。
Android對放在mipmap目錄的圖標(biāo)會忽略屏幕密度遇八,會去盡量匹配大一點的,然后系統(tǒng)自動對圖片進(jìn)行縮放耍休,從而優(yōu)化顯示和節(jié)省資源(使用上面說的mipmap技術(shù))刃永。就目前的版本來說,mipmap也沒有完全取代drawable的意思羊精,為了更好的顯示效果斯够,官方建議如下類型的圖片資源可以放到mipmap目錄。
Launcher icons.
Action bar and tab icons.
Notification icons
drawable-nodpi文件夾
這個文件夾是一個密度無關(guān)的文件夾喧锦,放在這里的圖片系統(tǒng)就不會對它進(jìn)行自動縮放读规,原圖片是多大就會實際展示多大。但是要注意一個加載的順序燃少,drawable-nodpi文件夾是在匹配密度文件夾和更高密度文件夾都找不到的情況下才會去這里查找圖片的束亏,因此放在drawable-nodpi文件夾里的圖片通常情況下不建議再放到別的文件夾里面。
res/raw和assets的區(qū)別
這兩個目錄下的文件都會被打包進(jìn)APK阵具,并且不經(jīng)過任何的壓縮處理碍遍。
assets與res/raw不同點在于,assets支持任意深度的子目錄阳液,這些文件不會生成任何資源ID怕敬,只能使用AssetManager按相對的路徑讀取文件。如需訪問原始文件名和文件層次結(jié)構(gòu)帘皿,則可以考慮將某些資源保存在assets目錄下东跪。
記得之前的版本(Android 2.2)對放在這兩個目錄的文件還有大小的限制,1M這樣吧,之后的版本沒有這個限制了虽填。
和美工的關(guān)系
很多時候丁恭,UI設(shè)計師并不太了解Android的DPI,也不太清楚每種DPI對應(yīng)的ICON規(guī)格卤唉。這時Android的開發(fā)就需要告訴他們一些規(guī)范涩惑,并結(jié)合自己的在真機上的測試經(jīng)驗給予符合項目的ICON尺寸仁期。對于每種密度下的ICON應(yīng)該設(shè)計成什么尺寸其實Android也是給出了最佳建議桑驱,ICON的尺寸最好不要隨意設(shè)計,因為過低的分辨率會造成圖標(biāo)模糊跛蛋,而過高的分辨率只會徒增APK大小熬的。
?密度 | 建議尺寸 |
---|---|
mipmap-mdpi | 48 * 48 |
mipmap-hdpi | 72 * 72 |
mipmap-xhdpi | 96 * 96 |
mipmap-xxhdpi | 144 * 144 |
mipmap-xxxhdpi | 192 * 192 |
小結(jié)
我在面試是常把面試者分做兩類。一類是打下手的開發(fā)赊级,做一些功能或業(yè)務(wù)模塊實現(xiàn)押框,修修BUG保證應(yīng)用正常運行;另一類是主創(chuàng)型開發(fā)理逊,也可以叫主力開發(fā)橡伞,他們對應(yīng)用開發(fā)的各個模塊都有了解,可以熟練地從零開始搭建出整個項目框架晋被。
而現(xiàn)在面試者一但有幾年工作經(jīng)歷标沪,往往在簡歷和交談中夸大他們對項目的貢獻(xiàn)期奔,本來只是一個打下手的卻被抬高成了主力開發(fā)。一個人打過多年下手,也會積累很多開發(fā)經(jīng)驗军浆,但并不等于他就能適應(yīng)主力開發(fā)的工作,主力選手除了經(jīng)驗的積累外更重要的是思維方式的改變攒驰,注重接口的設(shè)計勝過功能代碼的實現(xiàn)吝岭。
如果我們要招一個有經(jīng)驗的主力型選手,還是很有必要通過一個細(xì)節(jié)來檢驗他們的威蕉。不過還是要提醒一下面試官刁俭,對細(xì)節(jié)的提問要注意到必需的知識和冷門少用到的知識,問對方過于偏僻的細(xì)節(jié)點往往起不到效果韧涨。
Even 原創(chuàng)
簡書賬號:Goeasyway
簡書鏈接:http://www.reibang.com/users/f9fbc7a39b36/latest_articles
轉(zhuǎn)載請注明出處薄翅。