经常会有朋友问我这个问题:“能不能一个App只提供一套切图适应所有的分辨率呢?”我觉得有必要写一篇文章来研究一下这个问题,所以就有了这篇文章。
研究内容
本篇内容主要探讨以下场景:同一张图片,放置在不同的drawable文件夹,在同一设备上运行,对图片大小及内存占用有什么影响。
研究方法
控制变量法
分析法
测试环境
采用锤子T1手机(1080*1960,xxhdpi)进行测试
对于内存的查看,使用AS自带的内存查看工具。
图片大小使用如下代码获取
private void printBitmapSize(ImageView imageView) { Drawable drawable = imageView.getDrawable(); if (drawable != null) { BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable; Bitmap bitmap = bitmapDrawable.getBitmap(); Log.d(TAG, " width = " + bitmap.getWidth() + " height = " + bitmap.getHeight()); } else { Log.d(TAG, "Drawable is null !"); } }
研究过程
下面将给出测试的过程的截图,然后进行分析和总结
下面的测试使用的是一张720*1280分辨率的png图片,32位色,占用硬盘大小为77.11k
下面给出测试工程代码,非常简单
主界面
public class MainActivity extends AppCompatActivity { private static final String TAG = "MainActivity"; private ImageView img; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); img = (ImageView) findViewById(R.id.img); } @Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); printBitmapSize(img); } private void printBitmapSize(ImageView imageView) { Drawable drawable = imageView.getDrawable(); if (drawable != null) { BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable; Bitmap bitmap = bitmapDrawable.getBitmap(); Log.d(TAG, " width = " + bitmap.getWidth() + " height = " + bitmap.getHeight()); } else { Log.d(TAG, "Drawable is null !"); } } }
布局界面
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:id="@+id/img" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </RelativeLayout>
在不设置图片的情况下,App占用内存8.31M
以下为测试部分
把图片放置在drawable文件夹下,图片大小为2160 * 3840,内存占用39.88M
把图片放置在drawable-mdpi文件夹下,图片大小为2160 * 3840,内存占用39.84M
把图片放置在drawable-hdpi文件夹下,图片大小为1440 * 2560,内存占用22.26M
把图片放置在drawable-xhdpi文件夹下,图片大小为1080 * 1920,内存占用16.11M
把图片放置在drawable-xxhdpi文件夹下,图片大小为720 * 1280,内存占用11.86M
把图片放置在drawable-xx