android studio你可能忽視的細節——啓動白屏?drawable和mipmap出現的意義?這裏都有!!!

android studio用了好久了,也不知道各位小夥伴有沒有還在用eclipse的,若是還有,樓主真心推薦轉到android studio來吧,畢竟親兒子,你會知道除了啓動速度稍微慢些,你找不到一個亞於eclipse的地方,哦,你電腦還不能太爛~android

 

1)先來講說android studio 啓動應用黑白屏的問題。算法

前不久升級了studio,更新到了2.1.1,發現了一個問題。在啓動新項目的時候,app總會出現一段長時間的白屏或者黑屏,樓主一開始一直覺得是樓主接的公司項目算法太耗時的緣由,可是樓主在寫 小demo的時候居然也發現了這樣的問題,並且這樣的狀況在網上還至關的頻繁,樓主便去網上看了看問題所在,請看,圖片來源於網絡。網絡

四處查看一番,才知道這是android studio推出的新功能,Instant Run,好吧,對於這個東西,樓主不想去作過多深刻的講解,好吧,被你發現了,是樓主懼怕本身講很差這個東西。app

而這個東西呢一直以來被廣大朋友詬病,不過樓主仔細一看發現了一點新東西,原來這個在從新啓動的時候能夠直接從新啓動activity,而不是啓動整個app,因此這樣直接加快了咱們的開發效率有木有?eclipse

你們能夠看,這個運行的左邊有一個閃電的箭頭,這個就是表明可使用insant Run啓動的。測試

額,另外對於你們的擔憂,說一下,這個東西只是google官方在2.0之後爲了加快咱們的開發效率而作的,實際上你在真正使用app的時候並不會出現這樣可能長達七、8秒的黑白屏狀況,還望不知道的小夥伴壓壓驚。google

 

2)再來講下android studio 的mipmap和drawable的選擇。spa

你們都知道,android studio相比eclipse,在資源包res下,多了一個文件夾mipmap,裏面的子文件夾居然和drawable下的如出一轍,那平平多搞一個出來作什麼呢?code

查看官方文檔,下面資料來自谷歌官方。xml

額,我相信各位小夥伴的英文水平不會比樓主還渣吧,樓主簡單的看了一下,大概意思是:

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一類專用於存放圖標的文件夾。

相關文章
相關標籤/搜索