【问题标题】:Android: How to solve Bitmap java.lang.OutOfMemoryError?Android:如何解决位图 java.lang.OutOfMemoryError?
【发布时间】:2012-04-27 12:05:43
【问题描述】:

我在使用位图显示大图像时收到java.lang.OutOfMemoryError
为了调整位图大小,我参考了以下链接Save Bitmap and BitmapFactory.decodeFile

我的logcat如下:

FATAL EXCEPTION: main
java.lang.OutOfMemoryError
    at     android.graphics.Bitmap.nativeCreate(Native Method)
    at     android.graphics.Bitmap.createBitmap(Bitmap.java:604)
    at     android.graphics.Bitmap.createBitmap(Bitmap.java:551)
    at     com.android.restaurant.DescriptionPage.getResizedBitmap(DescriptionPage.java:327)
    at         com.android.restaurant.DescriptionPage.setDetailsIntoLayout(DescriptionPage.java:172)
    at com.android.restaurant.DescriptionPage.onCreate(DescriptionPage.java:101)
    at android.app.Activity.performCreate(Activity.java:4397)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1048)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1782)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1834)
    at android.app.ActivityThread.access$500(ActivityThread.java:125)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1027)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:132)
    at android.app.ActivityThread.main(ActivityThread.java:4135)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:491)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
    at dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

  • 您的代码有问题,或者手机内存不足。无论哪种方式,我们都无法帮助您,至少在您发布代码之前是这样。
  • @Raman-Mystry - 请参阅下面的“高效显示位图”文章。如果您仍然遇到问题,请 1) 发布相关代码,2) 告诉我们有关您的位图的一些信息(例如它的硬件大小和文件大小!),3) 告诉我们您的系统之前有多少内存尝试加载位图
  • [试试看][1] [1]:stackoverflow.com/questions/10081008/… 真的会帮到你。
  • @paulsm4 :我已经更新了我的问题。

标签: android bitmap out-of-memory


【解决方案1】:

由于您尚未发布代码,因此很难知道是否存在可以改进的错误或可能无效的代码。

但是一般JVM内存是有限的,所以加载大图会导致OutOfMemoryError。您可以尝试使用-Xmx 选项增加JVM 内存。这是第一种也是最简单的方法。

其他方法是减少您的图像(如果可能的话)。或者可能使用 BMP 以外的格式(例如 JPG)。它保证了良好的质量并且需要更少的内存。

【讨论】:

    【解决方案2】:

    开发移动应用程序的挑战在于您的内存有限。

    我想到的第一件事是尝试使用 PNG(便携式网络图形)而不是位图(如果可能的话)。

    除此之外,这似乎是现有问题,请检查:- http://code.google.com/p/android/issues/detail?id=8488

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-01
      • 1970-01-01
      • 2017-08-10
      • 2018-12-25
      • 2014-06-15
      相关资源
      最近更新 更多