【问题标题】:Android - Out of memory issue in S3Android - S3 中的内存不足问题
【发布时间】:2013-04-01 10:21:29
【问题描述】:

我正在开发一个在一个页面中有七个滑块的 android 应用程序。即,有七个问题,每个问题对应一个滑块。用户可以通过在每个滑块中滑动指针来回答问题。在 S3 中,此页面正在崩溃。我们在本节中使用高分辨率图像。

这是因为 S3 中的堆大小较小吗?我们能解决这个问题吗?有什么方法可以解决这个问题吗?对于这个帧,我们是否需要使用质量较差的图像(这是不可取的)?

【问题讨论】:

  • 你能张贴你的屏幕快照吗?是否在一个屏幕上显示所有 7 个问题以及相关图像。?

标签: android uiimageview out-of-memory


【解决方案1】:

使用下面的方法在 ImageView 中设置从this 链接获得的图像对我有用

  public Bitmap ShrinkBitmap(String file, int width, int height){

             BitmapFactory.Options bmpFactoryOptions = new BitmapFactory.Options();
                bmpFactoryOptions.inJustDecodeBounds = true;
                Bitmap bitmap = BitmapFactory.decodeFile(file, bmpFactoryOptions);

                int heightRatio = (int)Math.ceil(bmpFactoryOptions.outHeight/(float)height);
                int widthRatio = (int)Math.ceil(bmpFactoryOptions.outWidth/(float)width);

                if (heightRatio > 1 || widthRatio > 1)
                {
                 if (heightRatio > widthRatio)
                 {
                  bmpFactoryOptions.inSampleSize = heightRatio;
                 } else {
                  bmpFactoryOptions.inSampleSize = widthRatio;
                 }
                }

                bmpFactoryOptions.inJustDecodeBounds = false;
                bitmap = BitmapFactory.decodeFile(file, bmpFactoryOptions);
             return bitmap;
            }

【讨论】:

【解决方案2】:

http://developer.android.com/training/displaying-bitmaps/load-bitmap.html.

有效地加载位图。请参阅将缩小版本加载到内存主题下的链接。

在不使用时回收位图。

http://www.youtube.com/watch?v=_CruQY55HOk。谈话是关于内存管理的。如果运行内存泄漏,您可以使用 MAT Analyzer 查找并修复问题。该视频还讨论了堆和 MAT Analyzer 的使用。

【讨论】:

    【解决方案3】:

    你是loading Bitmaps Efficiently吗?

    如果是,那么您可以尝试通过使用来增加堆大小

    android:largeHeap="true"
    

    在 AndroidManifest 文件中的 <application> 标记中。

    警告:

    • 更大的堆大小意味着更长的 GC(垃圾收集)时间。
    • 如果您增大应用堆大小,则会显着降低其他应用的速度,用户很快就会知道您的应用存在问题。
    • 不要因为出现内存错误而使用此选项。

    【讨论】:

    • youtube.com/watch?v=_CruQY55HOk。更多的堆内存,更频繁的垃圾收集。视频中的人对使用大堆提出了一个很大的警告。
    • 感谢您的快速回复。我需要知道的第一件事是,这是否可以在 S3 中使用更高分辨率的图像解决这个问题?
    • @Raghunandan 我知道,但如果您需要在没有更多可用选项的情况下执行您的应用程序,您可以使用它。
    • @Venu V 在使用大堆之前考虑警告。
    猜你喜欢
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-18
    • 2013-08-07
    相关资源
    最近更新 更多