Сбой приложения при 4-м повороте экрана (второй раз в альбомной ориентации) с различными портретными и альбомными макетами - PullRequest
0 голосов
/ 17 октября 2011

У меня есть приложение, которое использует два совершенно разных макета для портрета и пейзажа. Портретный режим является основным вариантом использования, где пользователь может управлять приложением, и состоит из ListView с несколькими другими элементами представлений вокруг него. Ландшафтный макет - это просто информационное представление того, что было в последний раз выбрано в портретном виде, и состоит из ViewPager, заполненного веб-представлениями, и некоторых из тех же представлений, что и в режиме protrait, но не всех из них. Когда я запускаю приложение в режиме отладки из Eclipse и поворачиваюсь из портретной в альбомную, обратно в портретную, а затем обратно в альбомную ориентацию, каждый раз при последнем повороте в альбомную ориентацию происходит сбой (распечатка стека в logcat ниже). Если я запускаю приложение на своем телефоне без режима отладки, оно не вылетает. Трассировка стека не говорит мне много о том, почему происходит сбой. Я стараюсь убедиться, что представления не равны нулю, где бы они ни использовались в коде.

Моя проблема выглядит так же, как this , но в этом разговоре нет более подробной информации о решении. Может кто-нибудь дать мне понять, что может пойти не так? Мои догадки: Приложению не хватает памяти (какая-то утечка памяти происходит при каждом повороте, что вызывает сбой после 4 вращений).

Или я должен реорганизовать свое приложение и каким-то образом сделать два совершенно разных макета двумя разными действиями? Эти два макета обладают достаточной функциональностью, чтобы я захотел использовать одно и то же действие.

Трассировка стека Logcat:

10-16 21:53:58.690: ERROR/AndroidRuntime(4494): FATAL EXCEPTION: main
10-16 21:53:58.690: ERROR/AndroidRuntime(4494): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.fonkmobile.player22tracks/com.fonkmobile.player22tracks.PlaylistActivity}: android.view.InflateException: Binary XML file line #2: Error inflating class <unknown>
10-16 21:53:58.690: ERROR/AndroidRuntime(4494):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
10-16 21:53:58.690: ERROR/AndroidRuntime(4494):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
10-16 21:53:58.690: ERROR/AndroidRuntime(4494):     at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3815)
10-16 21:53:58.690: ERROR/AndroidRuntime(4494):     at android.app.ActivityThread.access$2400(ActivityThread.java:125)
10-16 21:53:58.690: ERROR/AndroidRuntime(4494):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2037)
10-16 21:53:58.690: ERROR/AndroidRuntime(4494):     at android.os.Handler.dispatchMessage(Handler.java:99)
10-16 21:53:58.690: ERROR/AndroidRuntime(4494):     at android.os.Looper.loop(Looper.java:123)
10-16 21:53:58.690: ERROR/AndroidRuntime(4494):     at android.app.ActivityThread.main(ActivityThread.java:4627)
10-16 21:53:58.690: ERROR/AndroidRuntime(4494):     at java.lang.reflect.Method.invokeNative(Native Method)
10-16 21:53:58.690: ERROR/AndroidRuntime(4494):     at java.lang.reflect.Method.invoke(Method.java:521)
10-16 21:53:58.690: ERROR/AndroidRuntime(4494):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
10-16 21:53:58.690: ERROR/AndroidRuntime(4494):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
10-16 21:53:58.690: ERROR/AndroidRuntime(4494):     at dalvik.system.NativeStart.main(Native Method)
10-16 21:53:58.690: ERROR/AndroidRuntime(4494): Caused by: android.view.InflateException: Binary XML file line #2: Error inflating class <unknown>
10-16 21:53:58.690: ERROR/AndroidRuntime(4494):     at android.view.LayoutInflater.createView(LayoutInflater.java:513)
10-16 21:53:58.690: ERROR/AndroidRuntime(4494):     at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
10-16 21:53:58.690: ERROR/AndroidRuntime(4494):     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:563)
10-16 21:53:58.690: ERROR/AndroidRuntime(4494):     at android.view.LayoutInflater.parseInclude(LayoutInflater.java:679)
10-16 21:53:58.690: ERROR/AndroidRuntime(4494):     at android.view.LayoutInflater.rInflate(LayoutInflater.java:614)
10-16 21:53:58.690: ERROR/AndroidRuntime(4494):     at android.view.LayoutInflater.rInflate(LayoutInflater.java:621)
10-16 21:53:58.690: ERROR/AndroidRuntime(4494):     at android.view.LayoutInflater.inflate(LayoutInflater.java:407)
10-16 21:53:58.690: ERROR/AndroidRuntime(4494):     at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
10-16 21:53:58.690: ERROR/AndroidRuntime(4494):     at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
10-16 21:53:58.690: ERROR/AndroidRuntime(4494):     at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:198)
10-16 21:53:58.690: ERROR/AndroidRuntime(4494):     at android.app.Activity.setContentView(Activity.java:1647)
10-16 21:53:58.690: ERROR/AndroidRuntime(4494):     at com.fonkmobile.player22tracks.PlaylistActivity.onCreate(PlaylistActivity.java:170)
10-16 21:53:58.690: ERROR/AndroidRuntime(4494):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
10-16 21:53:58.690: ERROR/AndroidRuntime(4494):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
10-16 21:53:58.690: ERROR/AndroidRuntime(4494):     ... 12 more
10-16 21:53:58.690: ERROR/AndroidRuntime(4494): Caused by: java.lang.reflect.InvocationTargetException
10-16 21:53:58.690: ERROR/AndroidRuntime(4494):     at android.widget.LinearLayout.<init>(LinearLayout.java:115)
10-16 21:53:58.690: ERROR/AndroidRuntime(4494):     at java.lang.reflect.Constructor.constructNative(Native Method)
10-16 21:53:58.690: ERROR/AndroidRuntime(4494):     at java.lang.reflect.Constructor.newInstance(Constructor.java:446)
10-16 21:53:58.690: ERROR/AndroidRuntime(4494):     at android.view.LayoutInflater.createView(LayoutInflater.java:500)
10-16 21:53:58.690: ERROR/AndroidRuntime(4494):     ... 25 more
10-16 21:53:58.690: ERROR/AndroidRuntime(4494): Caused by: android.content.res.Resources$NotFoundException: File res/drawable-mdpi/playlist_expanded_bg.png from drawable resource ID #0x7f02003c
10-16 21:53:58.690: ERROR/AndroidRuntime(4494):     at android.content.res.Resources.loadDrawable(Resources.java:1714)
10-16 21:53:58.690: ERROR/AndroidRuntime(4494):     at android.content.res.TypedArray.getDrawable(TypedArray.java:601)
10-16 21:53:58.690: ERROR/AndroidRuntime(4494):     at android.view.View.<init>(View.java:1885)
10-16 21:53:58.690: ERROR/AndroidRuntime(4494):     at android.view.View.<init>(View.java:1834)
10-16 21:53:58.690: ERROR/AndroidRuntime(4494):     at android.view.ViewGroup.<init>(ViewGroup.java:285)
10-16 21:53:58.690: ERROR/AndroidRuntime(4494):     ... 29 more
10-16 21:53:58.690: ERROR/AndroidRuntime(4494): Caused by: java.lang.NullPointerException
10-16 21:53:58.690: ERROR/AndroidRuntime(4494):     at android.graphics.Bitmap.createBitmap(Bitmap.java:439)
10-16 21:53:58.690: ERROR/AndroidRuntime(4494):     at android.graphics.Bitmap.createScaledBitmap(Bitmap.java:342)
10-16 21:53:58.690: ERROR/AndroidRuntime(4494):     at android.graphics.BitmapFactory.finishDecode(BitmapFactory.java:504)
10-16 21:53:58.690: ERROR/AndroidRuntime(4494):     at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:478)
10-16 21:53:58.690: ERROR/AndroidRuntime(4494):     at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:325)
10-16 21:53:58.690: ERROR/AndroidRuntime(4494):     at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:697)
10-16 21:53:58.690: ERROR/AndroidRuntime(4494):     at android.content.res.Resources.loadDrawable(Resources.java:1709)
10-16 21:53:58.690: ERROR/AndroidRuntime(4494):     ... 33 more

Мои 2 файла макета:

Рез / планировка-земля / playlist.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout android:id="@+id/playlistLayout"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent" android:background="@android:color/black">

    <android.support.v4.view.ViewPager
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/webviewpager"/>

    <SlidingDrawer android:layout_alignParentBottom="true"
        android:id="@+id/slidingDrawerAudioBar" android:layout_width="fill_parent"
        android:layout_height="70dip" android:layout_marginBottom="117dip"
        android:handle="@+id/audiohandle" android:content="@+id/audiocontent">

        <ImageView android:layout_width="0dip"
            android:layout_height="0dip" android:id="@id/audiohandle" />
        <include android:id="@+id/audiocontent" layout="@layout/volumebar" />
    </SlidingDrawer>
    <SlidingDrawer android:layout_alignParentBottom="true"
        android:id="@+id/slidingDrawerScrubbingBar" android:layout_width="fill_parent"
        android:layout_height="125dip" android:handle="@+id/scrubbinghandle"
        android:layout_marginBottom="117dip" android:content="@+id/scrubbingcontent">
        <ImageView android:layout_width="0dip"
            android:layout_height="0dip" android:id="@id/scrubbinghandle" />
        <include android:id="@+id/scrubbingcontent" layout="@layout/seekbar" />
    </SlidingDrawer>
    <SlidingDrawer android:layout_alignParentBottom="true"
        android:id="@+id/slidingDrawerNowPlaying" android:layout_width="fill_parent"
        android:layout_height="50dip" android:handle="@+id/nowplayinghandle"
        android:content="@+id/nowplayingcontent">
        <ImageView android:layout_width="0dip"
            android:layout_height="0dip" android:id="@id/nowplayinghandle" />
        <include android:id="@+id/nowplayingcontent" layout="@layout/nowplaying"></include>
    </SlidingDrawer>

    <SlidingDrawer android:layout_alignParentBottom="true"
        android:id="@+id/slidingDrawerPlayBar" android:layout_width="fill_parent"
        android:layout_height="125dip" android:handle="@+id/playhandle"
        android:content="@+id/playcontent">

        <ImageView android:layout_width="0dip"
            android:layout_height="0dip" android:id="@id/playhandle" />
        <include android:id="@+id/playcontent" layout="@layout/playbar" />
    </SlidingDrawer>

</RelativeLayout>

Рез / расположение портов / playlist.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout android:id="@+id/playlistLayout"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent" android:background="@android:color/black">

    <android.support.v4.view.ViewPager
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/webviewpager"
    android:visibility = "gone"/>

     <include android:id="@+id/djbar" layout="@layout/djbar" />

    <ListView android:id="@+id/playlistview" android:layout_width="fill_parent"
        android:layout_height="fill_parent" android:choiceMode="singleChoice"
        android:longClickable="false" android:cacheColorHint="@android:color/transparent"
        android:listSelector="@android:color/transparent"
        android:drawSelectorOnTop="false"
        android:layout_below="@id/djbar"
        >
    </ListView>

    <ProgressBar android:id="@+id/emptyplaylist"
        style="?android:attr/progressBarStyleLarge" android:layout_height="wrap_content"
        android:layout_width="wrap_content" android:layout_centerInParent="true">
    </ProgressBar>

    <com.fonkmobile.player22tracks.widgets.MultiDirectionSlidingDrawer
        xmlns:my="http://schemas.android.com/apk/res/com.fonkmobile.player22tracks"
        android:id="@+id/genredrawer"
        my:allowSingleTap="true"
        my:animateOnClick = "true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        my:handle="@+id/genrehandle"
        my:content="@+id/genrecontent"
        my:direction="leftToRight">
        <include
            android:id="@id/genrecontent"
            layout="@layout/genrelist" />
        <ImageView
            android:id="@id/genrehandle"
            android:layout_width="40dip"
            android:layout_height="80dip"
             />
    </com.fonkmobile.player22tracks.widgets.MultiDirectionSlidingDrawer>

    <SlidingDrawer android:layout_alignParentBottom="true"
        android:id="@+id/slidingDrawerAudioBar" android:layout_width="fill_parent"
        android:layout_height="70dip" android:layout_marginBottom="117dip"
        android:handle="@+id/audiohandle" android:content="@+id/audiocontent">

        <ImageView android:layout_width="0dip"
            android:layout_height="0dip" android:id="@id/audiohandle" />
        <include android:id="@+id/audiocontent" layout="@layout/volumebar" />
    </SlidingDrawer>
    <SlidingDrawer android:layout_alignParentBottom="true"
        android:id="@+id/slidingDrawerScrubbingBar" android:layout_width="fill_parent"
        android:layout_height="125dip" android:handle="@+id/scrubbinghandle"
        android:layout_marginBottom="117dip" android:content="@+id/scrubbingcontent">
        <ImageView android:layout_width="0dip"
            android:layout_height="0dip" android:id="@id/scrubbinghandle" />
        <include android:id="@+id/scrubbingcontent" layout="@layout/seekbar" />
    </SlidingDrawer>
    <SlidingDrawer android:layout_alignParentBottom="true"
        android:id="@+id/slidingDrawerNowPlaying" android:layout_width="fill_parent"
        android:layout_height="50dip" android:handle="@+id/nowplayinghandle"
        android:content="@+id/nowplayingcontent">
        <ImageView android:layout_width="0dip"
            android:layout_height="0dip" android:id="@id/nowplayinghandle" />
        <include android:id="@+id/nowplayingcontent" layout="@layout/nowplaying"></include>
    </SlidingDrawer>

    <SlidingDrawer android:layout_alignParentBottom="true"
        android:id="@+id/slidingDrawerPlayBar" android:layout_width="fill_parent"
        android:layout_height="125dip" android:handle="@+id/playhandle"
        android:content="@+id/playcontent">

        <ImageView android:layout_width="0dip"
            android:layout_height="0dip" android:id="@id/playhandle" />
        <include android:id="@+id/playcontent" layout="@layout/playbar" />
    </SlidingDrawer>
    <ImageView android:src="@drawable/dragbar_left"
        android:layout_centerVertical="true" android:layout_alignParentLeft="true"
        android:background="@null" android:id="@+id/imageDrawerArrow"
        android:layout_width="26dip" android:layout_height="100dip" 
        android:adjustViewBounds="true"
        android:layout_margin="0dip"></ImageView>


</RelativeLayout>

1 Ответ

0 голосов
/ 29 мая 2016

это произошло из-за утечки памяти.

в манифесте, к разделу действия, добавлено:

android:configChanges="keyboardHidden|orientation"

в код для действия, реализовано:

//used in onCreate() and onConfigurationChanged() to set up the UI elements
public void InitializeUI()
{
    //get views from ID's
    this.textViewHeaderMainMessage = (TextView) this.findViewById(R.id.TextViewHeaderMainMessage);

    //etc... hook up click listeners, whatever you need from the Views
}

//Called when the activity is first created.
@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    InitializeUI();
}

//this is called when the screen rotates.
// (onCreate is no longer called when screen rotates due to manifest, see: android:configChanges)
@Override
public void onConfigurationChanged(Configuration newConfig)
{
    super.onConfigurationChanged(newConfig);
    setContentView(R.layout.main);

    InitializeUI();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...