Строка № 39 двоичного XML-файла: ошибка надувания класса <unknown>

Я получаю вид отчета от пользователя в отчете об ошибках в Google Play. Я никогда не получаю эту ошибку в моем телефоне Galaxy S2 i9100 и других телефонах Android, которые у меня есть.

java.lang.RuntimeException: Unable to start activity ComponentInfo{AnantApps.Moodlytics/anantapps.moodlytics.ui.WhatsNewSlideshow}: android.view.InflateException: Binary XML file line #39: Error inflating class <unknown>
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1970)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1995)
at android.app.ActivityThread.access$600(ActivityThread.java:128)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1161)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4514)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:980)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:747)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.view.InflateException: Binary XML file line #39: Error inflating class <unknown>
at android.view.LayoutInflater.createView(LayoutInflater.java:606)
at  com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
at android.view.LayoutInflater.onCreateView(LayoutInflater.java:653)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:678)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:739)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:742)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:742)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:742)
at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
at anantapps.moodlytics.ui.WhatsNewSlideshow.setupSlideShow(WhatsNewSlideshow.java:106)
at anantapps.moodlytics.ui.WhatsNewSlideshow.initViews(WhatsNewSlideshow.java:87)
at anantapps.moodlytics.ui.WhatsNewSlideshow.onCreate(WhatsNewSlideshow.java:55)
at android.app.Activity.performCreate(Activity.java:4470)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1053)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1934)
... 11 more
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Constructor.constructNative(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
at android.view.LayoutInflater.createView(LayoutInflater.java:586)
... 27 more
Caused by: java.lang.OutOfMemoryError
at android.graphics.Bitmap.nativeCreate(Native Method)
at android.graphics.Bitmap.createBitmap(Bitmap.java:605)
at android.graphics.Bitmap.createBitmap(Bitmap.java:551)
at android.graphics.Bitmap.createScaledBitmap(Bitmap.java:437)
at android.graphics.BitmapFactory.finishDecode(BitmapFactory.java:618)
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:593)
at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:445)
at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:775)
at android.content.res.Resources.loadDrawable(Resources.java:1968)
at android.content.res.TypedArray.getDrawable(TypedArray.java:601)
at android.widget.ImageView.<init>(ImageView.java:119)
at android.widget.ImageView.<init>(ImageView.java:109)
... 30 more

Иногда пользователь также сообщает об этом, но мне не удается воспроизвести его.

java.lang.OutOfMemoryError
at android.graphics.Bitmap.nativeCreate(Native Method)
at android.graphics.Bitmap.createBitmap(Bitmap.java:605)
at android.graphics.Bitmap.createBitmap(Bitmap.java:551)
at android.graphics.Bitmap.createScaledBitmap(Bitmap.java:437)
at android.graphics.BitmapFactory.finishDecode(BitmapFactory.java:618)
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:593)
at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:445)
at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:775)
at android.content.res.Resources.loadDrawable(Resources.java:1968)
at android.content.res.Resources.getDrawable(Resources.java:677)
at android.widget.ImageView.resolveUri(ImageView.java:542)
at android.widget.ImageView.setImageResource(ImageView.java:315)
at anantapps.moodlytics.ui.WhatsNewSlideshow.setupSlideShow(WhatsNewSlideshow.java:118)
at anantapps.moodlytics.ui.WhatsNewSlideshow.initViews(WhatsNewSlideshow.java:87)
at anantapps.moodlytics.ui.WhatsNewSlideshow.onCreate(WhatsNewSlideshow.java:55)
at android.app.Activity.performCreate(Activity.java:4470)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1053)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1934)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1995)
at android.app.ActivityThread.access$600(ActivityThread.java:128)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1161)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4514)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:980)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:747)
at dalvik.system.NativeStart.main(Native Method)

в деятельности, моя функция такова....

private void setupSlideShow(ArrayList<String> titles, ArrayList<String> desc) {

    realViewSwitcher = (HorizontalPager) findViewById(R.id.horizontalPager);
    realViewSwitcher.removeAllViews();

    LayoutInflater inflater = getLayoutInflater();

    for (int i = 0; i < titles.size(); i++) {

        View v = inflater.inflate(R.layout.whats_new_slide_show_item, null);
        TextView titleTV = (TextView) v
                .findViewById(R.id.whats_new_item_title);
        titleTV.setTypeface(CommonFunctions.getBold(getContext()));
        titleTV.setText(titles.get(i));

        TextView descTV = (TextView) v
                .findViewById(R.id.whats_new_item_desc);
        descTV.setTypeface(CommonFunctions.getNormal(getContext()));
        descTV.setText(desc.get(i));

        ImageView img = (ImageView) v.findViewById(R.id.img_whats_slide);
        img.setImageResource(imgResources.get(i));

        realViewSwitcher.addView(v);

    }

    realViewSwitcher.setOnScreenSwitchListener(onScreenSwitchListener);

}

whats_new_slide_show_item.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_margin="10dp"
        android:orientation="vertical" >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center_horizontal"
            android:orientation="vertical" >

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                android:paddingBottom="5dp"
                android:paddingLeft="10dp" >

                <TextView
                    android:id="@+id/whats_new_item_title"
                    style="@style/whats_new_title"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:text="Large Text" />
            </LinearLayout>

            <ImageView
                android:id="@+id/img_whats_slide"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/bug_fixes" />

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                android:paddingLeft="10dp"
                android:paddingTop="3dp" >

                <TextView
                    android:id="@+id/whats_new_item_desc"
                    style="@style/whats_new_desc"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:text="Medium Text" />
            </LinearLayout>
        </LinearLayout>
    </LinearLayout>
</LinearLayout>

whats_new_slide_show.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout
    android:id="@+id/whats_new_slides_container"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/bar_bg"
    android:orientation="horizontal" >

    <TextView
        android:id="@+id/whats_new_header"
        style="@style/TopBarTitle"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:gravity="center"
        android:text="@string/whats_new_title" />

    <LinearLayout
        android:layout_width="2dp"
        android:layout_height="match_parent"
        android:background="@drawable/seperator_whats_new" >
    </LinearLayout>

    <Button
        android:id="@+id/btn_next_slide"
        style="@style/Whats_new_btn"
        android:layout_width="65dp"
        android:layout_height="match_parent"
        android:background="@drawable/whats_new_next_btn"
        android:gravity="center"
        android:paddingLeft="10dp"
        android:paddingRight="10dp"
        android:text="@string/btn_next" />
</LinearLayout>

<LinearLayout
    android:id="@+id/whats_new_slides_container"
    android:layout_width="fill_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:background="@color/tra_white_ninety" >

    <anantapps.moodlytics.view.HorizontalPager
        android:id="@+id/horizontalPager"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </anantapps.moodlytics.view.HorizontalPager>
</LinearLayout>

2 ответа

Похоже, вы пытаетесь предварительно загрузить все ваши изображения для слайд-шоу. Если вы перепроектируете свое приложение так, чтобы загружать изображения только тогда, когда оно просматривается, пиковое использование памяти будет намного меньше, что поможет вам избежать проблем с нехваткой памяти.

Я столкнулся с ошибкой памяти, поэтому постараюсь рассказать об этом.

Вещи, которые вы должны попробовать:

1) Очистить ресурсы (System.gc(); а также Runtime.getRuntime().gc();) на паузу или на уничтожение на предыдущей активности.

2) (В чем заключалась моя проблема) Убедитесь, что ваши изображения имеют большой размер, так как на самом большом экране ваше приложение запущено или поддерживается (у меня было два элемента дизайна с разрешением 1000x486, и это вывело меня из ошибки памяти).

Другие вопросы по тегам