Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 多个位图可能出现内存不足错误_Android_Memory_Bitmap - Fatal编程技术网

Android 多个位图可能出现内存不足错误

Android 多个位图可能出现内存不足错误,android,memory,bitmap,Android,Memory,Bitmap,我有一个用户评论说,在我的应用程序中查看了一堆图像后,它崩溃了(他认为这是由于内存不足错误)。我有以下相关代码: int themeID = mNav[mPos]; String icon = getThemeData(DbAdapter.KEY_ICON, themeID); ImageView viewer = (ImageView)findViewById(R.id.viewer); Bitmap bMap = null; try {

我有一个用户评论说,在我的应用程序中查看了一堆图像后,它崩溃了(他认为这是由于内存不足错误)。我有以下相关代码:

    int themeID = mNav[mPos];
    String icon = getThemeData(DbAdapter.KEY_ICON, themeID);
    ImageView viewer = (ImageView)findViewById(R.id.viewer);

    Bitmap bMap = null;
    try {
        bMap = getJPG(icon + ".jpg");
    } catch (IOException e) {
        e.printStackTrace();
    }


    viewer.setImageBitmap(bMap);
当用户在图像之间切换时,会重新运行。根据我的了解,您应该在位图上调用recycle()。设置图像后是否需要在bMap上调用它?或者在设置下一个之前,是否有办法将其从viwer中拉出


根据recycle文档(如果我在bMap上调用它),似乎我不需要使用它:这是一个高级调用,通常不需要调用,因为正常的GC进程将在不再引用此位图时释放此内存

如果需要显式调用
recycle()
,则可能意味着您存在内存泄漏。打电话给它几乎从来都不是一个解决办法

您是否尝试检查您的应用程序是否存在潜在的mmory泄漏

例如,要检查它,您可以旋转设备几次,并检查垃圾收集器的行为。你应该有一些类似GC的东西。。。释放211K,71%释放300K/1024K,外部0K/0K,几乎每次旋转时都在日志中暂停1ms+1ms。注意这部分的变化:300K/1024K。如果没有内存泄漏,第一部分应该会增长,然后在几次GCs后变小。如果内存泄漏,它将不断增长,直至出错

我的另一个关于内存泄漏的答案


如果您确定没有泄漏,并且您正在蜂巢上操作,您可以像这样增加应用程序可访问的堆大小:
android:largeHeap=“true”
但只有在处理一些huuuge位图或视频时才建议这样做。

尝试了旋转。根据您的条件,似乎不是内存泄漏。从5000转到7000,再转回到5000,然后旋转20-30圈后反弹。是的,看起来没问题。也许这不是一个错误?他怎么知道是一个?他有一个FC?也许告诉他复制报告并发送给你(这是堆栈跟踪)?不过,我不确定报告是否出现在所有系统上。