android studio你可能忽视的细节——启动白屏?drawable和mipmap出现的意义?这里都有!!!...
android studio用了很久了,也不知道各位小伙伴有沒(méi)有還在用eclipse的,如果還有,樓主真心推薦轉(zhuǎn)到android studio來(lái)吧,畢竟親兒子,你會(huì)知道除了啟動(dòng)速度稍微慢些,你找不到一個(gè)亞于eclipse的地方,哦,你電腦還不能太爛~
?
1)先來(lái)說(shuō)說(shuō)android studio 啟動(dòng)應(yīng)用黑白屏的問(wèn)題。
前不久升級(jí)了studio,更新到了2.1.1,發(fā)現(xiàn)了一個(gè)問(wèn)題。在啟動(dòng)新項(xiàng)目的時(shí)候,app總會(huì)出現(xiàn)一段長(zhǎng)時(shí)間的白屏或者黑屏,樓主一開(kāi)始一直以為是樓主接的公司項(xiàng)目算法太耗時(shí)的原因,但是樓主在寫(xiě) 小demo的時(shí)候竟然也發(fā)現(xiàn)了這樣的問(wèn)題,而且這樣的情況在網(wǎng)上還相當(dāng)?shù)念l繁,樓主便去網(wǎng)上看了看問(wèn)題所在,請(qǐng)看,圖片來(lái)源于網(wǎng)絡(luò)。
四處查看一番,才知道這是android studio推出的新功能,Instant Run,好吧,對(duì)于這個(gè)東西,樓主不想去做過(guò)多深入的講解,好吧,被你發(fā)現(xiàn)了,是樓主害怕自己講不好這個(gè)東西。
而這個(gè)東西呢一直以來(lái)被廣大朋友詬病,不過(guò)樓主仔細(xì)一看發(fā)現(xiàn)了一點(diǎn)新東西,原來(lái)這個(gè)在重新啟動(dòng)的時(shí)候可以直接重新啟動(dòng)activity,而不是啟動(dòng)整個(gè)app,所以這樣直接加快了我們的開(kāi)發(fā)效率有木有?
大家可以看,這個(gè)運(yùn)行的左邊有一個(gè)閃電的箭頭,這個(gè)就是代表可以使用insant Run啟動(dòng)的。
額,另外對(duì)于大家的擔(dān)心,說(shuō)一下,這個(gè)東西只是google官方在2.0以后為了加快我們的開(kāi)發(fā)效率而做的,實(shí)際上你在真正使用app的時(shí)候并不會(huì)出現(xiàn)這樣可能長(zhǎng)達(dá)7、8秒的黑白屏情況,還望不知道的小伙伴壓壓驚。
?
2)再來(lái)說(shuō)下android studio 的mipmap和drawable的選擇。
大家都知道,android studio相比eclipse,在資源包res下,多了一個(gè)文件夾mipmap,里面的子文件夾竟然和drawable下的一模一樣,那平平多搞一個(gè)出來(lái)做什么呢?
查看官方文檔,下面資料來(lái)自谷歌官方。
額,我相信各位小伙伴的英文水平不會(huì)比樓主還渣吧,樓主簡(jiǎn)單的看了一下,大概意思是:
drawable包下可以存放png,jpeg,gif圖像文件,以及我們開(kāi)發(fā)經(jīng)常用到的.9圖,不過(guò)drawable包主要還是為了存放一些自定義的圖形和按鈕變色等之類(lèi)的xml。
而mipmap是純粹的為存放應(yīng)用icon和一些其他圖片而生,這也是官方強(qiáng)烈推薦我們使用mipmap存放圖片的,官方說(shuō)把圖片放在mipmaps下面可以提高系統(tǒng)渲染圖片的速度,提高圖片質(zhì)量,減少GPU壓力。
?
3)好吧,其實(shí)樓主最想說(shuō)的還是mipmap下幾個(gè)包的作用以及屏幕適配的部分處理。
首先樓主就在樓主的博客園首頁(yè)簡(jiǎn)單截一張圖,放在mipmap下的xhdpi文件夾下。
因?yàn)闃侵鞯氖謾C(jī)就是xhdpi密度的,對(duì)于查看自己的手機(jī)密度,可以通過(guò)兩行代碼處理。
1 public void btnClick(View view) { 2 float xdpi = getResources().getDisplayMetrics().xdpi; 3 float ydpi = getResources().getDisplayMetrics().ydpi; 4 TextView textView = (TextView) findViewById(R.id.text); 5 textView.setText("寬度:"+xdpi+" 高度:"+ydpi); 6 }樓主的xml文件很簡(jiǎn)單。
1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout 3 xmlns:android="http://schemas.android.com/apk/res/android" 4 xmlns:tools="http://schemas.android.com/tools" 5 android:layout_width="match_parent" 6 android:layout_height="match_parent" 7 android:orientation="vertical" 8 tools:context="com.example.nanchen.drawablemipmapdemo.MainActivity"> 9 10 <Button 11 android:layout_width="match_parent" 12 android:layout_height="wrap_content" 13 android:text="獲取屏幕寬度" 14 android:onClick="btnClick"/> 15 <TextView 16 android:layout_width="match_parent" 17 android:layout_height="wrap_content" 18 android:id="@+id/text" 19 android:text="用于顯示屏幕寬高"/> 20 21 <TextView 22 android:layout_marginTop="10dp" 23 android:layout_marginBottom="10dp" 24 android:layout_width="match_parent" 25 android:layout_height="1dp" 26 android:background="#9c9a9a"/> 27 28 <ImageView 29 30 android:layout_width="wrap_content" 31 android:layout_height="wrap_content" 32 android:src="@mipmap/test" 33 android:contentDescription="用于展示圖片"/> 34 </LinearLayout>運(yùn)行:
點(diǎn)擊按鈕,可以看到樓主的機(jī)型是295*295的,屬于xhdpi密度機(jī)型,對(duì)于比對(duì),大家可以查看下圖。
?
而圖片的顯示樓主是采用的wrap_content包裹內(nèi)容,下面我們把圖片移動(dòng)到xxdpi,注意:不是復(fù)制,是移動(dòng)!!!
再次運(yùn)行:
什么鬼,圖片直接變小了,錯(cuò)覺(jué)?
再次把圖片移動(dòng)到hdpi包下看看。
運(yùn)行:
這次又變大了,看來(lái)這的確不是錯(cuò)覺(jué)呀。
分析一下,我們把一張圖片放在比手機(jī)密度高的包下的時(shí)候,顯示出來(lái)的東西會(huì)變小,而放在密度比手機(jī)更低的包下,圖片會(huì)自動(dòng)放大。
我是這樣理解的,不知道正確與否,手機(jī)的密度大小就像一個(gè)容器,當(dāng)手機(jī)密度大的時(shí)候意味著可以裝的東西更大,而一個(gè)同樣大小的東西看起來(lái)相對(duì)就會(huì)小一些,所以我們看到的顯示的圖片變小了,而放在密度更小的包下的時(shí)候,圖片看起來(lái)相對(duì)會(huì)大些。
嘿嘿,投機(jī)取巧了。
?
4)日常開(kāi)發(fā)應(yīng)該注意的問(wèn)題。
?根據(jù)android的開(kāi)發(fā)建議,我們應(yīng)該在準(zhǔn)備圖片資源的時(shí)候盡量給每種密度都準(zhǔn)備一套,這樣可以使屏幕的適配性達(dá)到最好,這也是因?yàn)槲覀僡ndroid機(jī)型眾多的一個(gè)基本要求。
UI順便再把按照縮放比例來(lái)為我們準(zhǔn)備一套,想想真是美妙極了。
但,實(shí)際情況是!!!!
他們只會(huì)給你一套圖片資源,沒(méi)錯(cuò),理想很豐滿(mǎn),現(xiàn)實(shí)很骨感,的確如此,那我們?cè)僭趺礃右驳弥泵鎽K淡的人生對(duì)吧,怎么做呢?
根據(jù)我們上面的測(cè)試,可以發(fā)現(xiàn)當(dāng)一張圖片放在高密度的包下,圖片會(huì)被縮小,除了看著小點(diǎn)好像還沒(méi)什么,但是當(dāng)在低密度的包下,圖片的放大必然會(huì)引起占用更多的內(nèi)存。因?yàn)閳D片變大了,占用的像素點(diǎn)也就更多了,而這也必然會(huì)導(dǎo)致內(nèi)存的占用增加。
我相信很多在職開(kāi)發(fā)人員都有遇到,就是當(dāng)你的項(xiàng)目慢慢變大后,你引用一張hdpi像素的照片時(shí),都極有可能發(fā)生OOM,但如果放在高密度的xxhdp或者xxxhdpi的時(shí)候,這樣的情況就不會(huì)發(fā)生。
經(jīng)過(guò)上面的分析,也可以得到這樣的結(jié)論,我們最佳的放置應(yīng)該在高密度的文件夾下,而目前市面最合適的是xxhdpi。
?
好了,本節(jié)內(nèi)容先介紹到這里,歡迎指正。
?
——————————————————————————————————————————————————————————————————
?
2016年8月18日15時(shí)57分更正:
首先感謝好心人士?Fndroid在評(píng)論區(qū)的解答,根據(jù)樓主查看官方資料,的確是有說(shuō)明圖片我們應(yīng)該盡量的置于drawable文件夾下,而mipmap用于存放圖標(biāo),android studio之所以會(huì)在drawable的基礎(chǔ)上添加上mipmap,是為了解決由于項(xiàng)目的增大導(dǎo)致開(kāi)發(fā)人員會(huì)把圖片和icon混淆,所以增加了mipmap一類(lèi)專(zhuān)用于存放圖標(biāo)的文件夾。
轉(zhuǎn)載于:https://www.cnblogs.com/liushilin/p/5778544.html
總結(jié)
以上是生活随笔為你收集整理的android studio你可能忽视的细节——启动白屏?drawable和mipmap出现的意义?这里都有!!!...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Bzoj 4548: 小奇的糖果(双向链
- 下一篇: webRTC实战总结