Android 我一直收到一个java.lang.outofmemory错误

Android 我一直收到一个java.lang.outofmemory错误,android,image,android-layout,Android,Image,Android Layout,我正在尝试为我的应用程序设置一个背景,使其在平板电脑和手机上都能很好地扩展。所以我得到了一个png背景,它的尺寸是2560×1600,但大小只有44k。然而,每次我运行应用程序时,我总是得到这个 08-08 14:50:21.251: E/AndroidRuntime(2924): FATAL EXCEPTION: main 08-08 14:50:21.251: E/AndroidRuntime(2924): java.lang.RuntimeException: Unable to star

我正在尝试为我的应用程序设置一个背景,使其在平板电脑和手机上都能很好地扩展。所以我得到了一个png背景,它的尺寸是2560×1600,但大小只有44k。然而,每次我运行应用程序时,我总是得到这个

08-08 14:50:21.251: E/AndroidRuntime(2924): FATAL EXCEPTION: main
08-08 14:50:21.251: E/AndroidRuntime(2924): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.reflap.reflap/com.reflap.reflap.MainActivity}: android.view.InflateException: Binary XML file line #7: Error inflating class <unknown>
08-08 14:50:21.251: E/AndroidRuntime(2924):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211)
08-08 14:50:21.251: E/AndroidRuntime(2924):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
08-08 14:50:21.251: E/AndroidRuntime(2924):     at android.app.ActivityThread.access$600(ActivityThread.java:141)
08-08 14:50:21.251: E/AndroidRuntime(2924):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
08-08 14:50:21.251: E/AndroidRuntime(2924):     at android.os.Handler.dispatchMessage(Handler.java:99)
08-08 14:50:21.251: E/AndroidRuntime(2924):     at android.os.Looper.loop(Looper.java:137)
08-08 14:50:21.251: E/AndroidRuntime(2924):     at android.app.ActivityThread.main(ActivityThread.java:5103)
08-08 14:50:21.251: E/AndroidRuntime(2924):     at java.lang.reflect.Method.invokeNative(Native Method)
08-08 14:50:21.251: E/AndroidRuntime(2924):     at java.lang.reflect.Method.invoke(Method.java:525)
08-08 14:50:21.251: E/AndroidRuntime(2924):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
08-08 14:50:21.251: E/AndroidRuntime(2924):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
08-08 14:50:21.251: E/AndroidRuntime(2924):     at dalvik.system.NativeStart.main(Native Method)
08-08 14:50:21.251: E/AndroidRuntime(2924): Caused by: android.view.InflateException: Binary XML file line #7: Error inflating class <unknown>
08-08 14:50:21.251: E/AndroidRuntime(2924):     at android.view.LayoutInflater.createView(LayoutInflater.java:620)
08-08 14:50:21.251: E/AndroidRuntime(2924):     at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
08-08 14:50:21.251: E/AndroidRuntime(2924):     at android.view.LayoutInflater.onCreateView(LayoutInflater.java:669)
08-08 14:50:21.251: E/AndroidRuntime(2924):     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:694)
08-08 14:50:21.251: E/AndroidRuntime(2924):     at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
08-08 14:50:21.251: E/AndroidRuntime(2924):     at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
08-08 14:50:21.251: E/AndroidRuntime(2924):     at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
08-08 14:50:21.251: E/AndroidRuntime(2924):     at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
08-08 14:50:21.251: E/AndroidRuntime(2924):     at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:267)
08-08 14:50:21.251: E/AndroidRuntime(2924):     at android.app.Activity.setContentView(Activity.java:1895)
08-08 14:50:21.251: E/AndroidRuntime(2924):     at com.reflap.reflap.MainActivity.onCreate(MainActivity.java:18)
08-08 14:50:21.251: E/AndroidRuntime(2924):     at android.app.Activity.performCreate(Activity.java:5133)
08-08 14:50:21.251: E/AndroidRuntime(2924):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
08-08 14:50:21.251: E/AndroidRuntime(2924):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
08-08 14:50:21.251: E/AndroidRuntime(2924):     ... 11 more
08-08 14:50:21.251: E/AndroidRuntime(2924): Caused by: java.lang.reflect.InvocationTargetException
08-08 14:50:21.251: E/AndroidRuntime(2924):     at java.lang.reflect.Constructor.constructNative(Native Method)
08-08 14:50:21.251: E/AndroidRuntime(2924):     at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
08-08 14:50:21.251: E/AndroidRuntime(2924):     at android.view.LayoutInflater.createView(LayoutInflater.java:594)
08-08 14:50:21.251: E/AndroidRuntime(2924):     ... 24 more
08-08 14:50:21.251: E/AndroidRuntime(2924): Caused by: java.lang.OutOfMemoryError
08-08 14:50:21.251: E/AndroidRuntime(2924):     at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
08-08 14:50:21.251: E/AndroidRuntime(2924):     at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:503)
08-08 14:50:21.251: E/AndroidRuntime(2924):     at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:356)
08-08 14:50:21.251: E/AndroidRuntime(2924):     at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:800)
08-08 14:50:21.251: E/AndroidRuntime(2924):     at android.content.res.Resources.loadDrawable(Resources.java:2105)
08-08 14:50:21.251: E/AndroidRuntime(2924):     at android.content.res.TypedArray.getDrawable(TypedArray.java:601)
08-08 14:50:21.251: E/AndroidRuntime(2924):     at android.widget.ImageView.<init>(ImageView.java:127)
08-08 14:50:21.251: E/AndroidRuntime(2924):     at android.widget.ImageView.<init>(ImageView.java:117)
08-08 14:50:21.251: E/AndroidRuntime(2924):     ... 27 more
08-08 14:50:21.251:E/AndroidRuntime(2924):致命异常:main
08-08 14:50:21.251:E/AndroidRuntime(2924):java.lang.RuntimeException:无法启动活动组件信息{com.reflap.reflap/com.reflap.reflap.MainActivity}:android.view.InflateException:二进制XML文件行#7:膨胀类时出错
08-08 14:50:21.251:E/AndroidRuntime(2924):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211)
08-08 14:50:21.251:E/AndroidRuntime(2924):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
08-08 14:50:21.251:E/AndroidRuntime(2924):在android.app.ActivityThread.access$600(ActivityThread.java:141)
08-08 14:50:21.251:E/AndroidRuntime(2924):在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
08-08 14:50:21.251:E/AndroidRuntime(2924):在android.os.Handler.dispatchMessage(Handler.java:99)上
08-08 14:50:21.251:E/AndroidRuntime(2924):在android.os.Looper.loop(Looper.java:137)
08-08 14:50:21.251:E/AndroidRuntime(2924):位于android.app.ActivityThread.main(ActivityThread.java:5103)
08-08 14:50:21.251:E/AndroidRuntime(2924):位于java.lang.reflect.Method.Invokenactive(本机方法)
08-08 14:50:21.251:E/AndroidRuntime(2924):在java.lang.reflect.Method.invoke(Method.java:525)
08-08 14:50:21.251:E/AndroidRuntime(2924):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
08-08 14:50:21.251:E/AndroidRuntime(2924):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
08-08 14:50:21.251:E/AndroidRuntime(2924):在dalvik.system.NativeStart.main(本机方法)
08-08 14:50:21.251:E/AndroidRuntime(2924):由以下原因引起:android.view.InflateException:二进制XML文件行#7:膨胀类时出错
08-08 14:50:21.251:E/AndroidRuntime(2924):在android.view.LayoutInflater.createView(LayoutInflater.java:620)
08-08 14:50:21.251:E/AndroidRuntime(2924):在com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
08-08 14:50:21.251:E/AndroidRuntime(2924):在android.view.LayoutInflater.onCreateView(LayoutInflater.java:669)
08-08 14:50:21.251:E/AndroidRuntime(2924):在android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:694)
08-08 14:50:21.251:E/AndroidRuntime(2924):在android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
08-08 14:50:21.251:E/AndroidRuntime(2924):在android.view.LayoutInflater.inflate(LayoutInflater.java:492)
08-08 14:50:21.251:E/AndroidRuntime(2924):在android.view.LayoutInflater.inflate(LayoutInflater.java:397)
08-08 14:50:21.251:E/AndroidRuntime(2924):在android.view.LayoutInflater.充气(LayoutInflater.java:353)
08-08 14:50:21.251:E/AndroidRuntime(2924):在com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:267)
08-08 14:50:21.251:E/AndroidRuntime(2924):位于android.app.Activity.setContentView(Activity.java:1895)
08-08 14:50:21.251:E/AndroidRuntime(2924):在com.reflap.reflap.MainActivity.onCreate(MainActivity.java:18)上
08-08 14:50:21.251:E/AndroidRuntime(2924):在android.app.Activity.performCreate(Activity.java:5133)上
08-08 14:50:21.251:E/AndroidRuntime(2924):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
08-08 14:50:21.251:E/AndroidRuntime(2924):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
2008-08 14:50:21.251:E/AndroidRuntime(2924):。。。还有11个
08-08 14:50:21.251:E/AndroidRuntime(2924):由以下原因引起:java.lang.reflect.InvocationTargetException
08-08 14:50:21.251:E/AndroidRuntime(2924):位于java.lang.reflect.Constructor.constructNative(本机方法)
08-08 14:50:21.251:E/AndroidRuntime(2924):位于java.lang.reflect.Constructor.newInstance(Constructor.java:417)
08-08 14:50:21.251:E/AndroidRuntime(2924):在android.view.LayoutInflater.createView(LayoutInflater.java:594)
2008-08 14:50:21.251:E/AndroidRuntime(2924):。。。还有24个
08-08 14:50:21.251:E/AndroidRuntime(2924):由以下原因引起:java.lang.OutOfMemoryError
08-08 14:50:21.251:E/AndroidRuntime(2924):在android.graphics.BitmapFactory.NativeDeacSet(本机方法)
08-08 14:50:21.251:E/AndroidRuntime(2924):在android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:503)上
08-08 14:50:21.251:E/AndroidRuntime(2924):在android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:356)
08-08 14:50:21.251:E/AndroidRuntime(2924):在android.graphics.drawable.drawable.createFromResourceStream(drawable.java:800)上
08-08 14:50:21.251:E/AndroidRuntime(2924):在android.content.res.Resources.loadDrawable(Resources.java:2105)
08-08 14:50:21.251:E/AndroidRuntime(2924):在android.content.res.TypedArray.getDrawable(TypedArray.java:601)
08-08 14:50:21.251:E/AndroidRuntime(2924):在android.widget.ImageView.(ImageView.java:127)
08-08 14:50:21.251:E/AndroidRuntime(2924):在android.widget.ImageView.(ImageView.java:117)
2008-08 14:50:21.251:E/AndroidRuntime(2924):。。。还有27个
我不明白这么小的尺寸怎么会失去记忆

这是imageview的布局xml

<ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:scaleType="center"
        android:src="@drawable/back" />

在内部,您的.png以每像素整数表示(默认情况下)。整数是4个字节。如果你算一下:

2560 pixels * 1600 pixels * 4 bytes / pixel = 16,384,000 bytes = 15.625 MB

旧版Android设备上每个应用程序的内存限制为16MB。便携式网络图形格式通常是压缩的,这就是为什么它的文件大小和在内存中表示图像的大小存在明显差异的原因。此外,即使您的图像没有或不需要alpha通道,Android也会在alpha通道上浪费一个字节。

在内部,您的.png用