2

У меня был следующий сбой, сообщенный только один конкретным пользователем на Android 4.0.3. Я не вижу ссылок в тракте стека на мой код, и мне интересно, есть ли у кого-нибудь идеи относительно того, что может вызвать эту проблему?StackOverflowError и я не могу понять, почему

Очевидно, что это не самый высокий приоритет, потому что об этом сообщается только один раз, но я все равно хотел бы понять. Я не могу воспроизвести на 4.0.2 (я не могу запустить эмулятор 4.0.3).

Спасибо,

Stack следа:

java.lang.StackOverflowError 
android.text.TextLine.handleRun(TextLine.java:986) 
android.text.TextLine.measureRun(TextLine.java:430) 
android.text.TextLine.measure(TextLine.java:295) 
android.text.TextLine.metrics(TextLine.java:269) 
android.text.Layout.getLineExtent(Layout.java:947) 
android.text.Layout.draw(Layout.java:410) 
android.text.BoringLayout.draw(BoringLayout.java:400) 
android.widget.TextView.onDraw(TextView.java:5047) 
android.view.View.draw(View.java:10983) 
android.view.View.getDisplayList(View.java:10422) 
android.view.ViewGroup.drawChild(ViewGroup.java:2856) 
android.view.ViewGroup.dispatchDraw(ViewGroup.java:2495) 
android.view.View.draw(View.java:10986) 
android.view.View.getDisplayList(View.java:10422) 
android.view.ViewGroup.drawChild(ViewGroup.java:2856) 
android.view.ViewGroup.dispatchDraw(ViewGroup.java:2495) 
android.view.View.getDisplayList(View.java:10420) 
android.view.ViewGroup.drawChild(ViewGroup.java:2856) 
android.view.ViewGroup.dispatchDraw(ViewGroup.java:2495) 
android.view.View.draw(View.java:10986) 
android.widget.FrameLayout.draw(FrameLayout.java:450) 
android.view.View.getDisplayList(View.java:10422) 
android.view.ViewGroup.drawChild(ViewGroup.java:2856) 
android.view.ViewGroup.dispatchDraw(ViewGroup.java:2495) 
android.widget.AbsListView.dispatchDraw(AbsListView.java:2092) 
android.view.View.draw(View.java:10986) 
android.widget.AbsListView.draw(AbsListView.java:3398) 
android.view.View.getDisplayList(View.java:10422) 
android.view.ViewGroup.drawChild(ViewGroup.java:2856) 
android.view.ViewGroup.dispatchDraw(ViewGroup.java:2495) 
android.view.View.draw(View.java:10986) 
android.widget.FrameLayout.draw(FrameLayout.java:450) 
android.view.View.getDisplayList(View.java:10422) 
android.view.ViewGroup.drawChild(ViewGroup.java:2856) 
android.view.ViewGroup.dispatchDraw(ViewGroup.java:2495) 
android.view.View.getDisplayList(View.java:10420) 
android.view.ViewGroup.drawChild(ViewGroup.java:2856) 
android.view.ViewGroup.dispatchDraw(ViewGroup.java:2495) 
android.view.View.draw(View.java:10986) 
android.view.View.getDisplayList(View.java:10422) 
android.view.ViewGroup.drawChild(ViewGroup.java:2856) 
android.view.ViewGroup.dispatchDraw(ViewGroup.java:2495) 
android.view.View.draw(View.java:10986) 
android.view.View.getDisplayList(View.java:10422) 
android.view.ViewGroup.drawChild(ViewGroup.java:2856) 
android.view.ViewGroup.dispatchDraw(ViewGroup.java:2495) 
android.view.View.draw(View.java:10986) 
android.widget.FrameLayout.draw(FrameLayout.java:450) 
android.widget.ScrollView.draw(ScrollView.java:1524) 
android.view.View.getDisplayList(View.java:10422) 
android.view.ViewGroup.drawChild(ViewGroup.java:2856) 
android.view.ViewGroup.dispatchDraw(ViewGroup.java:2495) 
android.view.View.draw(View.java:10986) 
android.support.v4.view.ViewPager.draw(SourceFile:2336) 
android.view.View.getDisplayList(View.java:10422) 
android.view.ViewGroup.drawChild(ViewGroup.java:2856) 
android.view.ViewGroup.dispatchDraw(ViewGroup.java:2495) 
android.view.View.draw(View.java:10986) 
android.view.View.getDisplayList(View.java:10422) 
android.view.ViewGroup.drawChild(ViewGroup.java:2856) 
android.view.ViewGroup.dispatchDraw(ViewGroup.java:2495) 
android.view.View.getDisplayList(View.java:10420) 
android.view.ViewGroup.drawChild(ViewGroup.java:2856) 
android.view.ViewGroup.dispatchDraw(ViewGroup.java:2495) 
android.view.View.draw(View.java:10986) 
android.view.View.getDisplayList(View.java:10422) 
android.view.ViewGroup.drawChild(ViewGroup.java:2856) 
android.support.v4.widget.DrawerLayout.drawChild(SourceFile:1373) 
android.view.ViewGroup.dispatchDraw(ViewGroup.java:2495) 
android.view.View.getDisplayList(View.java:10420) 
android.view.ViewGroup.drawChild(ViewGroup.java:2856) 
android.view.ViewGroup.dispatchDraw(ViewGroup.java:2495) 
android.view.View.draw(View.java:10986) 
android.view.View.getDisplayList(View.java:10422) 
android.view.ViewGroup.drawChild(ViewGroup.java:2856) 
android.view.ViewGroup.dispatchDraw(ViewGroup.java:2495) 
android.view.View.draw(View.java:10986) 
android.widget.FrameLayout.draw(FrameLayout.java:450) 
android.view.View.getDisplayList(View.java:10422) 
android.view.ViewGroup.drawChild(ViewGroup.java:2856) 
android.view.ViewGroup.dispatchDraw(ViewGroup.java:2495) 
android.view.View.draw(View.java:10986) 
android.view.View.getDisplayList(View.java:10422) 
android.view.ViewGroup.drawChild(ViewGroup.java:2856) 
android.view.ViewGroup.dispatchDraw(ViewGroup.java:2495) 
android.view.View.getDisplayList(View.java:10420) 
android.view.ViewGroup.drawChild(ViewGroup.java:2856) 
android.view.ViewGroup.dispatchDraw(ViewGroup.java:2495) 
android.view.View.draw(View.java:10986) 
android.view.View.getDisplayList(View.java:10422) 
android.view.ViewGroup.drawChild(ViewGroup.java:2856) 
android.view.ViewGroup.dispatchDraw(ViewGroup.java:2495) 
android.view.View.draw(View.java:10986) 
android.widget.FrameLayout.draw(FrameLayout.java:450) 
com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2198) 
android.view.View.getDisplayList(View.java:10422) 
android.view.HardwareRenderer$GlRenderer.draw(HardwareRenderer.java:849) 
android.view.ViewRootImpl.draw(ViewRootImpl.java:1942) 
android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1666) 
android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2474) 
android.os.Handler.dispatchMessage(Handler.java:99) 
android.os.Looper.loop(Looper.java:137) 
android.app.ActivityThread.main(ActivityThread.java:4447) 
java.lang.reflect.Method.invokeNative(Native Method) 
java.lang.reflect.Method.invoke(Method.java:511) 
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
dalvik.system.NativeStart.main(Native Method) 

Вот XML моей основного вида деятельности (в том, что пользователи DrawerLayout). Линт не сообщает ничего значительного, и я не вижу здесь очевидной проблемы.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <!-- To show drawer over toolbar, move this down to right above frameLayout --> 

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

    <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:tools="http://schemas.android.com/tools" 
     android:id="@+id/drawer_layout" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

     <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      xmlns:tools="http://schemas.android.com/tools" 
      android:id="@+id/content_layout" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:background="@color/bg_offwhite"> 

      <FrameLayout 
       android:id="@+id/main_frag_container" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       tools:context="com.nsouth.myapp.Activity_Main" 
       tools:ignore="MergeRootFrame" /> 

     </RelativeLayout> 

     <android.support.design.widget.NavigationView 
      android:id="@+id/navigation_view" 
      android:layout_width="290dp" 
      android:layout_height="match_parent" 
      android:layout_gravity="left" 
      android:theme="@style/MyNavViewTheme" 
      app:headerLayout="@layout/nav_drawer_header" 
      app:menu="@menu/nav_drawer_menu" /> 

    </android.support.v4.widget.DrawerLayout> 

    <android.support.design.widget.CoordinatorLayout 
     android:layout_width="match_parent" 
     android:layout_height="80dp" 
     android:layout_marginTop="-80dp" 
     android:id="@+id/snackbarPosition"> 
    </android.support.design.widget.CoordinatorLayout> 

    <LinearLayout 
     android:id="@+id/tv_main_debug_area" 
     android:layout_width="match_parent" 
     android:layout_height="40dp" 
     android:layout_marginTop="-40dp" 
     android:visibility="visible" 
     android:paddingLeft="10dp" 
     android:orientation="vertical"> 

     <TextView 
      android:id="@+id/tv_debug_pfeatures_status" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="unknown" /> 
     <TextView 
      android:id="@+id/tv_debug_pfeatures_daysremaining" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="unknown" /> 

    </LinearLayout> 

</LinearLayout> 
+0

У вас может быть несколько вложенных макетов внутри. –

ответ

0

Уверен, что у вас есть вложенные макеты, чтобы вы получили эту ошибку. See this question.

В дополнение было layoutopt исправить иерархические вопросы компоновки, но теперь заменяется lint после пересмотра SDK Tools 16.

Так используйте lint

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

+0

Спасибо, я буду бежать 'lint' и копать глубже завтра. Вы знаете, где я должен искать эти ошибки? Я запустил 'lint' в моем макете активности, который содержит мой DrawerLayout и не имеет красных флагов. Кроме того, поскольку развёртывание случайных макетов в другом макете не редкость в Android, я не уверен, какие типы вложенности могут вызвать эту проблему. Я обновил свой вопрос в своей деятельности XML. – NSouth

+0

Да, вы правы. Проблема возникает только в некоторых устройствах с версиями 4 -...-.... Я знаю, что [Hierarchy Viewer и инструмент lint] (http://developer.android.com/tools/debugging/debugging-ui.html) помогает отладить это, но, к сожалению, я не использовал их до сегодняшнего дня, так что я не глубокие знания об этом. Надеюсь, вы скоро это поймете и исправите. –