gpt4 book ai didi

android - 在 SDK 22 上安装 App 会导致 Bitmapfactory 出错

转载 作者:行者123 更新时间:2023-11-30 00:22:07 25 4
gpt4 key购买 nike

我写了一个应用程序,到目前为止我总是在 sdk 级别 25 上构建它。现在我想尝试在较低级别运行它但它崩溃了。在调试时我发现这个链接给出了错误:

bitmapBackgroundColors = BitmapFactory.decodeResource(this.getResources(), R.drawable.background_colors);

你知道它是如何摧毁一切的吗? :DBitmapfactory 从 SDK 1 开始就存在,所以这不是真正的问题。

我的 compileSdkVersion 是 25,我的 minSdkVersion 是 15,我的 targetSdkVersion 是 25。(虽然我还是不太明白这些数字是什么意思)

编辑:该错误是内存不足错误。但是它要加载的 .jpg 只有 128kb 大

java.lang.OutOfMemoryError: Failed to allocate a 223948812 byte allocation with 8134272 free bytes and 180MB until OOM
at dalvik.system.VMRuntime.newNonMovableArray(Native Method)
at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:609)
at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:444)
at android.graphics.BitmapFactory.decodeResource(BitmapFactory.java:467)
at android.graphics.BitmapFactory.decodeResource(BitmapFactory.java:497)
at com.cucumbertroup.strawberry.strawberry.GameView.<init>(GameView.java:136)
at com.cucumbertroup.strawberry.strawberry.MainActivity.onCreate(MainActivity.java:29)
at android.app.Activity.performCreate(Activity.java:5990)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2332)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2442)
at android.app.ActivityThread.access$800(ActivityThread.java:156)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1351)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:211)
at android.app.ActivityThread.main(ActivityThread.java:5389)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1020)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:815)

Edit2:所以我可能在图像解码时犯了一些错误。我怎样才能更有效地做到这一点:

bitmapBackgroundColors = BitmapFactory.decodeResource(this.getResources(), R.drawable.background_colors);
bitmapBackgroundColors = Bitmap.createScaledBitmap(bitmapBackgroundColors, screenX * 3, screenY, false);

最佳答案

使用 BitmapFactory.decodeResource()与 sdk 级别无关:

bitmapBackgroundColors = BitmapFactory.decodeResource(this.getResources(), R.drawable.background_colors);

问题在这里

java.lang.OutOfMemoryError: Failed to allocate a 223948812 byte allocation with 8134272 free bytes and 180MB until OOM

是每个设备上的内存存储容量不同。所以你必须优化你的图像。

查看这篇文章,了解优化图片的技巧:

Loading Large Bitmaps Efficiently

Handling Bitmaps decodeResource

作为示例,您将使用此方法

public static Bitmap decodeSampledBitmapFromResource(Resources res, int resId,
int reqWidth, int reqHeight) {

// First decode with inJustDecodeBounds=true to check dimensions
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeResource(res, resId, options);

// Calculate inSampleSize
options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);

// Decode bitmap with inSampleSize set
options.inJustDecodeBounds = false;
return BitmapFactory.decodeResource(res, resId, options);
}

并调用它来获得原始图像的较小版本:

//bitmapBackgroundColors = BitmapFactory.decodeResource(this.getResources(), R.drawable.background_colors);
bitmapBackgroundColors =
decodeSampledBitmapFromResource(this.getResources(), R.drawable.background_colors, 500, 500);

这是另一篇文章,旨在优化您在项目中使用的图像:

Reducing Image Download Sizes

关于android - 在 SDK 22 上安装 App 会导致 Bitmapfactory 出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46084063/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com