android studio用了很久了,也不知道各位小伙伴有沒有還在用eclipse的,如果還有,樓主真心推薦轉到android studio來吧,畢竟親兒子,你會知道除了啟動速度稍微慢些,你找不到一個亞於eclipse的地方,哦,你電腦還不能太爛~
1)先來說說android studio 啟動應用黑白屏的問題。
前不久升級了studio,更新到了2.1.1,發現了一個問題。在啟動新項目的時候,app總會出現一段長時間的白屏或者黑屏,樓主一開始一直以為是樓主接的公司項目算法太耗時的原因,但是樓主在寫 小demo的時候竟然也發現了這樣的問題,而且這樣的情況在網上還相當的頻繁,樓主便去網上看了看問題所在,請看,圖片來源於網絡。
四處查看一番,才知道這是android studio推出的新功能,Instant Run,好吧,對於這個東西,樓主不想去做過多深入的講解,好吧,被你發現了,是樓主害怕自己講不好這個東西。
而這個東西呢一直以來被廣大朋友詬病,不過樓主仔細一看發現了一點新東西,原來這個在重新啟動的時候可以直接重新啟動activity,而不是啟動整個app,所以這樣直接加快了我們的開發效率有木有?
大家可以看,這個運行的左邊有一個閃電的箭頭,這個就是代表可以使用insant Run啟動的。
額,另外對於大家的擔心,說一下,這個東西只是google官方在2.0以后為了加快我們的開發效率而做的,實際上你在真正使用app的時候並不會出現這樣可能長達7、8秒的黑白屏情況,還望不知道的小伙伴壓壓驚。
2)再來說下android studio 的mipmap和drawable的選擇。
大家都知道,android studio相比eclipse,在資源包res下,多了一個文件夾mipmap,里面的子文件夾竟然和drawable下的一模一樣,那平平多搞一個出來做什么呢?
查看官方文檔,下面資料來自谷歌官方。
額,我相信各位小伙伴的英文水平不會比樓主還渣吧,樓主簡單的看了一下,大概意思是:
drawable包下可以存放png,jpeg,gif圖像文件,以及我們開發經常用到的.9圖,不過drawable包主要還是為了存放一些自定義的圖形和按鈕變色等之類的xml。
而mipmap是純粹的為存放應用icon和一些其他圖片而生,這也是官方強烈推薦我們使用mipmap存放圖片的,官方說把圖片放在mipmaps下面可以提高系統渲染圖片的速度,提高圖片質量,減少GPU壓力。
3)好吧,其實樓主最想說的還是mipmap下幾個包的作用以及屏幕適配的部分處理。
首先樓主就在樓主的博客園首頁簡單截一張圖,放在mipmap下的xhdpi文件夾下。
因為樓主的手機就是xhdpi密度的,對於查看自己的手機密度,可以通過兩行代碼處理。
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文件很簡單。
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>
運行:
點擊按鈕,可以看到樓主的機型是295*295的,屬於xhdpi密度機型,對於比對,大家可以查看下圖。
而圖片的顯示樓主是采用的wrap_content包裹內容,下面我們把圖片移動到xxdpi,注意:不是復制,是移動!!!
再次運行:
什么鬼,圖片直接變小了,錯覺?
再次把圖片移動到hdpi包下看看。
運行:
這次又變大了,看來這的確不是錯覺呀。
分析一下,我們把一張圖片放在比手機密度高的包下的時候,顯示出來的東西會變小,而放在密度比手機更低的包下,圖片會自動放大。
我是這樣理解的,不知道正確與否,手機的密度大小就像一個容器,當手機密度大的時候意味着可以裝的東西更大,而一個同樣大小的東西看起來相對就會小一些,所以我們看到的顯示的圖片變小了,而放在密度更小的包下的時候,圖片看起來相對會大些。
嘿嘿,投機取巧了。
4)日常開發應該注意的問題。
根據android的開發建議,我們應該在准備圖片資源的時候盡量給每種密度都准備一套,這樣可以使屏幕的適配性達到最好,這也是因為我們android機型眾多的一個基本要求。
UI順便再把按照縮放比例來為我們准備一套,想想真是美妙極了。
但,實際情況是!!!!
他們只會給你一套圖片資源,沒錯,理想很豐滿,現實很骨感,的確如此,那我們再怎么樣也得直面慘淡的人生對吧,怎么做呢?
根據我們上面的測試,可以發現當一張圖片放在高密度的包下,圖片會被縮小,除了看着小點好像還沒什么,但是當在低密度的包下,圖片的放大必然會引起占用更多的內存。因為圖片變大了,占用的像素點也就更多了,而這也必然會導致內存的占用增加。
我相信很多在職開發人員都有遇到,就是當你的項目慢慢變大后,你引用一張hdpi像素的照片時,都極有可能發生OOM,但如果放在高密度的xxhdp或者xxxhdpi的時候,這樣的情況就不會發生。
經過上面的分析,也可以得到這樣的結論,我們最佳的放置應該在高密度的文件夾下,而目前市面最合適的是xxhdpi。
好了,本節內容先介紹到這里,歡迎指正。
——————————————————————————————————————————————————————————————————
2016年8月18日15時57分更正:
首先感謝好心人士 Fndroid在評論區的解答,根據樓主查看官方資料,的確是有說明圖片我們應該盡量的置於drawable文件夾下,而mipmap用於存放圖標,android studio之所以會在drawable的基礎上添加上mipmap,是為了解決由於項目的增大導致開發人員會把圖片和icon混淆,所以增加了mipmap一類專用於存放圖標的文件夾。