Java android.view.InflateException:二进制XML文件行#2:膨胀类时出错<;未知>;仅适用于android版本4.4.4

Java android.view.InflateException:二进制XML文件行#2:膨胀类时出错<;未知>;仅适用于android版本4.4.4,java,android,Java,Android,我正在开发一个应用程序,它有13个片段。我在许多虚拟android设备上测试了它,它崩溃了,只有在分辨率为1080x1920的android版本4.4.4中例外: android.view.InflateException: Binary XML file line #2: Error inflating class <unknown> at android.view.LayoutInflater.createView(LayoutInflater.java:620)

我正在开发一个应用程序,它有13个片段。我在许多虚拟android设备上测试了它,它崩溃了,只有在分辨率为1080x1920的android版本4.4.4中例外:

android.view.InflateException: Binary XML file line #2: Error inflating class <unknown>
        at android.view.LayoutInflater.createView(LayoutInflater.java:620)
        at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
        (...)
 Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Constructor.constructNative(Native Method)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
        at android.view.LayoutInflater.createView(LayoutInflater.java:594)
        at (...)
Caused by: java.lang.OutOfMemoryError
at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:594)
        at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:429)
        at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:840)
        at (...)   //output is same like in the link with question below
android.view.InflateException:二进制XML文件行#2:膨胀类时出错
位于android.view.LayoutInflater.createView(LayoutInflater.java:620)
在com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)上
(...)
原因:java.lang.reflect.InvocationTargetException
位于java.lang.reflect.Constructor.constructNative(本机方法)
位于java.lang.reflect.Constructor.newInstance(Constructor.java:423)
位于android.view.LayoutInflater.createView(LayoutInflater.java:594)
在(…)
原因:java.lang.OutOfMemoryError
在android.graphics.BitmapFactory.NativeDecodeset(本机方法)
位于android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:594)
位于android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:429)
位于android.graphics.drawable.drawable.createFromResourceStream(drawable.java:840)
at(…)//输出与下面带问题的链接中的相同
所有片段都具有相同的布局xml,第二行是LienarLayout的声明

我已经阅读了一些问题,比如,我使用的所有图像都是分辨率为720x1280(xhdpi)的图像,它们是从xml中加载的,作为片段的背景,而不是位图或其他什么

这是布局xml文件的开头,其中第2行是:


我没有具有相同参数的真实设备来测试它。有人知道这个异常的原因是什么,以及它是否也会出现在真实的设备上吗

提前谢谢你

有人知道这个例外的原因吗

您没有足够大的可用内存块进行分配,这似乎是为了支持加载可绘制资源而请求的

可绘制的是209KB,分辨率为720x1280,我认为它不大

即3686400字节(720像素x1280像素x4字节/像素)。就个人而言,这相当大。拥有多个堆很容易导致堆空间不足

它是否也会出现在真实的设备上

可能吧。每个设备上运行的应用程序都有一个Dalvik堆限制。它可能低至16MB,但24-48MB范围内的值更常见


在Android中处理较大的位图是一项棘手的工作

你的帖子接近不可读,考虑格式化它。同时发布xml文件,因为它无法加载drawable。看起来它很大)这是第9个片段(所有片段都具有相同的结构,所有其他片段都不会抛出任何异常,这就是为什么我想知道)可绘制的是209KB,分辨率为720x1280,我认为它不大好吧,但是如果209KB大,那么1MB呢。。。例如,像FIFA For phone之类的游戏,如果超过300MB的话,应该会有更大的图像,而且不会离开内存。其次,我在Android版本4.1.1、4.3、4.4.2和5.0上试用了这个应用程序,所有这些都可以+4.4.4,分辨率800x1280也可以(谷歌Nexus 7)我只在android版本为4.4.4且分辨率大于800x1280的设备上发现了一个错误…@GabriellaAngelova:“但是如果209KB很大,那么1MB呢”——你会注意到我的回答没有提到209KB。这是因为磁盘文件的大小无关紧要。内存分配的大小才是最重要的。这完全基于分辨率和位深度。“例如FIFA For phone之类的游戏”——一般来说,它们不是用Java开发的,因此总体上使用其他技术。啊哈,我理解分辨率的算法,但不可能只使用小(分辨率)图片,因为它们在大屏幕上看起来很糟糕,对我来说这仍然是一个谜,为什么其他设备的图片没有问题,只有那些安卓版本4.4.4,分辨率大于800x1280的设备(例如,安卓版本4.4的三星Galaxy S5或安卓版本4.4的谷歌Nexus 5-相同的设备,但其他安卓版本都可以)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/background"
    android:id="@+id/frg_bckg">