继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Android图片大小、内存占用与drawable文件夹关系分析

汪汪一只猫
关注TA
已关注
手记 568
粉丝 129
获赞 718

经常会有朋友问我这个问题:“能不能一个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

Picture

下面给出测试工程代码,非常简单

主界面

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

Picture

以下为测试部分

把图片放置在drawable文件夹下,图片大小为2160 * 3840,内存占用39.88M

Picture

把图片放置在drawable-mdpi文件夹下,图片大小为2160 * 3840,内存占用39.84M

Picture

把图片放置在drawable-hdpi文件夹下,图片大小为1440 * 2560,内存占用22.26M

Picture

把图片放置在drawable-xhdpi文件夹下,图片大小为1080 * 1920,内存占用16.11M

Picture

把图片放置在drawable-xxhdpi文件夹下,图片大小为720 * 1280,内存占用11.86M

Picture

把图片放置在drawable-xx

原文链接:http://www.apkbus.com/blog-822717-77092.html

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP