【问题标题】:How much thumbnails can I store until I run out of memory?在内存用完之前,我可以存储多少缩略图?
【发布时间】:2013-05-01 11:26:50
【问题描述】:

对于我的应用,我目前正在阅读手机上存储的所有图像 (JPEG) 文件,并将它们的 ID 和缩略图(不是原始位图)保存到 HashMap 中。

代码:

final String[] PROJECTION =
                new String[] {MediaStore.Images.Media._ID};

Cursor pictureCursor = getContentResolver().query(Images.Media.EXTERNAL_CONTENT_URI, 
                PROJECTION, null, null, MediaStore.Images.Media._ID);

HashMap<Integer,Bitmap> thumbnails = new HashMap<Integer,Bitmap>();

int id;
int id_index = pictureCursor.getColumnIndex(MediaStore.Images.Media._ID);

int THUMBNAIL_TYPE = MediaStore.Images.Thumbnails.MICRO_KIND;
ContentResolver content_resolver = context.getContentResolver();

while (pictureCursor.moveToNext()) {

    id = pictureCursor.getInt(id_index);
    Bitmap thumbnail = MediaStore.Images.Thumbnails.getThumbnail(content_resolver, id, THUMBNAIL_TYPE, null);
    thumbnails.put(id, thumbnail);
}

我的手机上目前有 200 张图片,现在可以正常使用。但我担心在某些时候,应用程序会耗尽内存并崩溃。

我需要考虑内存不足吗?或者缩略图是否足够小以至于实际上应用不会耗尽内存?

编辑 如果我担心内存不足,如果我想要像 Android 的原生图库应用这样的东西,它似乎没有“加载更多图像”按钮,而是无穷无尽的图像流,那么最好的方法是什么?

谢谢

【问题讨论】:

    标签: android memory-management thumbnails


    【解决方案1】:

    MICRO_KIND 缩略图不是很大,你很可能会没事的。但是如果你把你的应用程序放在那里,你绝对会发现有记忆问题的人。这可能是由于照片数量过多、设备平庸或两者兼而有之。

    您可以计算缩略图的内存使用情况。创建一两个缩略图并找出它们的大小应该不会太难。然后您可以计算可用堆(3.0 之前的原生堆,3.0 之后的 Dalvik 堆)并了解您可以创建多少。

    您可以在代码中此时获取光标中项目的计数:

    光标图片Cursor = getContentResolver().query(Images.Media.EXTERNAL_CONTENT_URI, 投影,空,空,MediaStore.Images.Media._ID); int numberOfImages = pictureCursor.getCount() HashMap 缩略图 = new HashMap();

    然后知道你是否有足够的空间。如果您的空间有限,您将需要做出设计决定——要么警告用户它不起作用,要么只查看前“x”个图像,然后释放这些图像并在用户处加载另一组图像请求。

    【讨论】:

      【解决方案2】:

      这取决于堆大小和您的应用程序的内存密集程度。

      我建议你看看链接中的视频

      http://www.youtube.com/watch?v=_CruQY55HOk.

      如果您遇到内存泄漏,您可以使用 MAT Analyzer 查找并修复问题。

      您需要减少内存使用量,如果堆大小增加并且您的应用需要堆空间,则 gc 会启动以释放内存。但是如果没有足够的空间,你很可能会遇到内存泄漏。

      http://developer.android.com/training/articles/perf-tips.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-05-24
        • 2019-08-22
        • 2012-12-10
        • 2014-03-02
        • 2015-03-08
        • 2019-11-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多