-1

当我开始在 API 23 中的 Galaxy S3 上测试我的应用程序时,我有点失望。当我启动启动画面时出现内存不足错误!哇。

02-01 20:17:29.110: E/AndroidRuntime(6304): FATAL EXCEPTION: main
02-01 20:17:29.110: E/AndroidRuntime(6304): java.lang.OutOfMemoryError
02-01 20:17:29.110: E/AndroidRuntime(6304):     at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
02-01 20:17:29.110: E/AndroidRuntime(6304):     at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:596)
02-01 20:17:29.110: E/AndroidRuntime(6304):     at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:444)
02-01 20:17:29.110: E/AndroidRuntime(6304):     at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:832)
02-01 20:17:29.110: E/AndroidRuntime(6304):     at android.content.res.Resources.loadDrawable(Resources.java:2988)
02-01 20:17:29.110: E/AndroidRuntime(6304):     at android.content.res.Resources.getDrawable(Resources.java:1558)
02-01 20:17:29.110: E/AndroidRuntime(6304):     at com.android.internal.policy.impl.PhoneWindow.generateLayout(PhoneWindow.java:3573)
02-01 20:17:29.110: E/AndroidRuntime(6304):     at com.android.internal.policy.impl.PhoneWindow.installDecor(PhoneWindow.java:3616)
02-01 20:17:29.110: E/AndroidRuntime(6304):     at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:357)
02-01 20:17:29.110: E/AndroidRuntime(6304):     at com.actionbarsherlock.internal.ActionBarSherlockNative.setContentView(ActionBarSherlockNative.java:133)
02-01 20:17:29.110: E/AndroidRuntime(6304):     at com.actionbarsherlock.app.SherlockActivity.setContentView(SherlockActivity.java:229)
02-01 20:17:29.110: E/AndroidRuntime(6304):     at com.milesbox.sport.tracker.LoginActivity.onCreate(LoginActivity.java:11)
02-01 20:17:29.110: E/AndroidRuntime(6304):     at android.app.Activity.performCreate(Activity.java:5372)
02-01 20:17:29.110: E/AndroidRuntime(6304):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1104)
02-01 20:17:29.110: E/AndroidRuntime(6304):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2257)
02-01 20:17:29.110: E/AndroidRuntime(6304):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2349)
02-01 20:17:29.110: E/AndroidRuntime(6304):     at android.app.ActivityThread.access$700(ActivityThread.java:159)
02-01 20:17:29.110: E/AndroidRuntime(6304):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1316)
02-01 20:17:29.110: E/AndroidRuntime(6304):     at android.os.Handler.dispatchMessage(Handler.java:99)
02-01 20:17:29.110: E/AndroidRuntime(6304):     at android.os.Looper.loop(Looper.java:176)
02-01 20:17:29.110: E/AndroidRuntime(6304):     at android.app.ActivityThread.main(ActivityThread.java:5419)
02-01 20:17:29.110: E/AndroidRuntime(6304):     at java.lang.reflect.Method.invokeNative(Native Method)
02-01 20:17:29.110: E/AndroidRuntime(6304):     at java.lang.reflect.Method.invoke(Method.java:525)
02-01 20:17:29.110: E/AndroidRuntime(6304):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1046)
02-01 20:17:29.110: E/AndroidRuntime(6304):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862)
02-01 20:17:29.110: E/AndroidRuntime(6304):     at dalvik.system.NativeStart.main(Native Method)

我的应用程序在 API 10 到 API 18 下运行良好。在 Splashscreen 活动中,我有 4 个图标和背景图像(1900*1200px ~ 400kb)。您是否有想法运行我的应用程序而不会出现内存不足的问题?

4

1 回答 1

2

要真正弄清楚,您需要使用我们其他人也可以看到的 API!但是,API 23 可能会修改您的应用程序访问的数据结构或对象的大小已经增加。如果没有代码和适合我们其他人的测试环境,除了这里的这个小提示之外,您可能不会得到太多:

加载位图时出现内存不足错误

您始终可以请求扩展堆,但鉴于您的情况不是真正的解决方案,它只会掩盖真正的问题。

仅供参考 - 如果您的背景是 1900 像素 * 1200 像素,那么它的内存分配可能占用 4 * 1900 * 1200 = 9MB(取决于图像的类型,但通常是每像素 4 个字节(32 位))。它很大,真的。

对于“OutOfMemory”的良好整体链接 - 这可能是 SO 上最好的:

将图像加载到 Bitmap 对象时出现奇怪的内存不足问题

以及基于设备/API的堆大小的良好链接:

Android 版本是否有最小堆大小?

于 2014-02-01T19:46:17.593 回答