【问题标题】:Android app crashing because of imageview由于 imageview,Android 应用程序崩溃
【发布时间】:2016-04-06 13:37:35
【问题描述】:

我有一个 FragmentActivity,它在 ViewPager 中有 5 个 Fragment。当我运行该应用程序时,它由于 Inflate Exception 而崩溃:

android.view.InflateException: Binary XML file line #59: Binary XML file line #59: Error inflating class

如果我取出我的 ImageViews,它不会崩溃。我不明白的是只有 5 张图像(每个片段中的一张),每张只有 60kb 或更少。这些 ImageViews 如何导致 XML 在膨胀时出错?这没有意义!

此外,该问题似乎只发生在某些版本的 Android 上。该应用程序将在我的 Note 3 上运行,但不能在具有更多内存的新 S6 Edge 上运行。我不明白为什么会这样!

谁能解释一下?

以下是当应用崩溃时试图膨胀的 XML:

<?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <ImageView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/ivSplashFive"
            android:scaleType="centerCrop"
            android:layout_marginBottom="75dp"
            android:src="@drawable/splashbeach2" />

        <LinearLayout
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/linearLayout11"
            android:layout_above="@+id/llAccept">

            <LinearLayout
                android:orientation="vertical"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:paddingTop="30dp">

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textAppearance="?android:attr/textAppearanceSmall"
                    android:text="SEE WHAT&apos;S GOING ON"
                    android:id="@+id/textView3"
                    android:layout_marginLeft="40dp"
                    android:layout_marginRight="40dp"
                    android:textAlignment="center"
                    android:textSize="16dp"
                    android:layout_gravity="center"
                    android:gravity="center"
                    android:textColor="#fff"
                    android:layout_marginBottom="5dp"
                    android:visibility="visible" />

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textAppearance="?android:attr/textAppearanceSmall"
                    android:text="ANYWHERE IN THE WORLD"
                    android:id="@+id/textView69"
                    android:textAlignment="center"
                    android:textSize="22dp"
                    android:layout_gravity="center"
                    android:gravity="center"
                    android:textStyle="bold"
                    android:textColor="#fff"
                    android:layout_marginBottom="5dp"
                    android:visibility="visible" />

                <ImageView
                    android:layout_width="150dp"
                    android:layout_height="150dp"
                    android:id="@+id/imageView50"
                    android:scaleType="centerCrop"
                    android:src="@drawable/logo_white"
                    android:layout_gravity="center_horizontal"
                    android:layout_alignParentBottom="false"
                    android:layout_centerHorizontal="true"
                    android:layout_marginTop="20dp" />

            </LinearLayout>

        </LinearLayout>

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="#fff"
        android:layout_above="@+id/llAccept"></LinearLayout>

    <LinearLayout
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="75dp"
            android:id="@+id/llAccept"
            android:gravity="center"
            android:visibility="visible"
            android:layout_alignParentBottom="true">

            <LinearLayout
                android:orientation="vertical"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:id="@+id/llSignIn"
                android:visibility="visible"
                android:gravity="right">


                <com.facebook.login.widget.LoginButton
                    android:id="@+id/login_button"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:text="SIGN IN WITH FACEBOOK"
                    android:background="@drawable/button_fb"
                    android:textColor="#FFF"
                    android:textStyle="bold" />

            </LinearLayout>

        </LinearLayout>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:text="Terms &amp; Conditions"
            android:id="@+id/textView13"
            android:layout_gravity="center_horizontal"
            android:textAlignment="center"
            android:textSize="10dp"
            android:textColor="#eee"
            android:textIsSelectable="false"
            android:textStyle="bold"
            android:layout_alignParentBottom="true"
            android:layout_alignParentRight="true"
            android:layout_alignParentTop="false"
            android:layout_marginRight="15dp"
            android:layout_marginBottom="90dp"
            android:visibility="gone" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:text="Privacy Statement"
            android:id="@+id/textView22"
            android:layout_gravity="center_horizontal"
            android:layout_marginLeft="15dp"
            android:textAlignment="center"
            android:textSize="10dp"
            android:textColor="#eee"
            android:textIsSelectable="false"
            android:textStyle="bold"
            android:layout_alignParentBottom="true"
            android:layout_alignParentRight="false"
            android:layout_alignParentTop="false"
            android:layout_marginBottom="90dp"
            android:visibility="gone" />



    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#fff"
        android:id="@+id/llLoggingIn"
        android:visibility="gone"
        android:orientation="vertical" >

        <ImageView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/imageView94"
            android:scaleType="centerCrop"
            android:src="@drawable/splashbeachlogo"
            android:layout_centerInParent="true"
            android:layout_gravity="center_horizontal" />

        <ProgressBar
            style="?android:attr/progressBarStyleLarge"
            android:layout_width="170dp"
            android:layout_height="170dp"
            android:id="@+id/progressBar4"
            android:layout_gravity="center_horizontal"
            android:indeterminate="true"
            android:indeterminateDrawable="@drawable/progress2"
            android:layout_alignWithParentIfMissing="false"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="20dp" />

        <ImageView
            android:layout_width="90dp"
            android:layout_height="90dp"
            android:id="@+id/imageView85"
            android:scaleType="centerCrop"
            android:src="@drawable/logo"
            android:layout_gravity="center_horizontal"
            android:layout_alignParentBottom="false"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="67dp" />

        <LinearLayout
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="false"
            android:id="@+id/linearLayout25"
            android:paddingBottom="15dp"
            android:paddingTop="5dp"
            android:layout_weight="1"
            android:gravity="center_horizontal"
            android:layout_below="@+id/imageView85"
            android:layout_marginTop="20dp">

            <LinearLayout
                android:orientation="horizontal"
                android:layout_width="200dp"
                android:layout_height="1dp"
                android:background="#fff"
                android:layout_marginTop="5dp"
                android:layout_marginBottom="10dp"></LinearLayout>

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textAppearance="?android:attr/textAppearanceSmall"
                android:text="Welcome To DropMap"
                android:id="@+id/textView168"
                android:textColor="#fff"
                android:textStyle="bold"
                android:textSize="14sp"
                android:layout_marginLeft="3dp"
                android:visibility="visible" />

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:textAppearance="?android:attr/textAppearanceSmall"
                android:text="We are setting things up for you\nOne Moment Please"
                android:id="@+id/textView169"
                android:textColor="#ddd"
                android:textSize="12dp"
                android:layout_alignParentBottom="true"
                android:layout_centerHorizontal="true"
                android:layout_marginTop="10dp"
                android:layout_marginLeft="60dp"
                android:layout_marginRight="60dp"
                android:gravity="center" />
        </LinearLayout>
    </RelativeLayout>
 </RelativeLayout>

堆栈跟踪是:

01-02 22:17:40.609 2590-2590/au.appsprout.com.dropmap W/art: Throwing OutOfMemoryError "Failed to allocate a 61440012 byte allocation with 3329648 free bytes and 3MB until OOM"
01-02 22:17:40.610 2590-2590/au.appsprout.com.dropmap E/AndroidRuntime: FATAL EXCEPTION: main
                                                                        Process: au.appsprout.com.dropmap, PID: 2590
                                                                        android.view.InflateException: Binary XML file line #7: Binary XML file line #7: Error inflating class <unknown>
                                                                            at android.view.LayoutInflater.inflate(LayoutInflater.java:539)
                                                                            at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
                                                                            at au.appsprout.com.dropmap.Splash$Fragment3.onCreateView(Splash.java:208)
                                                                            at android.support.v4.app.Fragment.performCreateView(Fragment.java:1962)
                                                                            at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067)
                                                                            at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1248)
                                                                            at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738)
                                                                            at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1613)
                                                                            at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:570)
                                                                            at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)
                                                                            at android.support.v4.view.ViewPager.populate(ViewPager.java:1106)
                                                                            at android.support.v4.view.ViewPager.populate(ViewPager.java:952)
                                                                            at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1474)
                                                                            at android.view.View.measure(View.java:18788)
                                                                            at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
                                                                            at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465)
                                                                            at android.widget.LinearLayout.measureVertical(LinearLayout.java:748)
                                                                            at android.widget.LinearLayout.onMeasure(LinearLayout.java:630)
                                                                            at android.view.View.measure(View.java:18788)
                                                                            at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
                                                                            at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
                                                                            at android.view.View.measure(View.java:18788)
                                                                            at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
                                                                            at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465)
                                                                            at android.widget.LinearLayout.measureVertical(LinearLayout.java:748)
                                                                            at android.widget.LinearLayout.onMeasure(LinearLayout.java:630)
                                                                            at android.view.View.measure(View.java:18788)
                                                                            at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
                                                                            at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
                                                                            at com.android.internal.policy.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2643)
                                                                            at android.view.View.measure(View.java:18788)
                                                                            at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2100)
                                                                            at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1216)
                                                                            at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1452)
                                                                            at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1107)
                                                                            at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6013)
                                                                            at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858)
                                                                            at android.view.Choreographer.doCallbacks(Choreographer.java:670)
                                                                            at android.view.Choreographer.doFrame(Choreographer.java:606)
                                                                            at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844)
                                                                            at android.os.Handler.handleCallback(Handler.java:739)
                                                                            at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                            at android.os.Looper.loop(Looper.java:148)
                                                                            at android.app.ActivityThread.main(ActivityThread.java:5417)
                                                                            at java.lang.reflect.Method.invoke(Native Method)
                                                                            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                                            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
                                                                         Caused by: android.view.InflateException: Binary XML file line #7: Error inflating class <unknown>
                                                                            at android.view.LayoutInflater.createView(LayoutInflater.java:645)
                                                                            at com.android.internal.policy.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:58)
                                                                            at android.view.LayoutInflater.onCreateView(LayoutInflater.java:694)
                                                                            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:762)
                                                                            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704)
                                                                            at android.view.LayoutInflater.rInflate(LayoutInflater.java:835)
                                                                            at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798)
                                                                            at android.v

【问题讨论】:

  • 错误信息是什么?记不清 ?非专业人士?如果内存不足,请尝试调整图像大小并压缩它们。
  • @Nickmccomb 请指出导致崩溃的图像,并提供完整的堆栈跟踪
  • 嗨 R4j,如果我在布局中留下任何 ImageView,那么它会给出相同的错误(我已经用堆栈跟踪编辑了我的问题)病毒,这是一个内存不足错误,但图像已经过优化(它们每个只有 50kb),它适用于内存较少的手机,如 JellyBean Note 3,但不适用于 Marshmellow S6 Edge。对我来说没有意义
  • 我的清单文件中也有 android:largeHeap="true"
  • 检查您的图像尺寸。如果它太大,请调整它的大小。我有一些尺寸为 3000 x 1500 的图像,但只有 10kb

标签: java android xml android-fragments


【解决方案1】:

使用毕加索图书馆 Picasso

Picasso.with(context)
.load(R.drawable.splashbeach2)
.resize(50, 50)
.centerCrop()
.into(imageView);

【讨论】:

  • 嗨 Meysam,我将在今天晚些时候尝试毕加索,并告诉你进展如何:)
  • 使用毕加索并没有解决问题,看起来毕加索只有在有内存时才加载图像,而没有毕加索,如果没有内存,应用程序会崩溃。两张只有 40kb 的图片怎么会导致应用出现 Out Of Memory 错误???这没有意义。其他应用有大量图像并且不会崩溃!
猜你喜欢
  • 2021-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-09
  • 1970-01-01
相关资源
最近更新 更多