Seltsames Problem - Stackoverflow

killphil75

killphil75

Fortgeschrittenes Mitglied
37
Hab hier gerade eine Merkwürdigkeit und weiss noch nicht wie ich sie lösen soll.

App besteht aus einem DrawerLayout, welches wiederum einen Viewpager (4 Seiten) enthält. Erste Seite im Viewpager enthält ein Layout wo ein Scrollview, diverse Platzhalter (Linearlayouts), und Textviews befinden, so weit so gut.

Nun habe ich den Scrollview in ein <android.support.v4.widget.SwipeRefreshLayout

gewrapped. Und auch das funktioniert alles super - dachte ich.
Ich entwickle immer auf einem Samsung Galaxy S1 (Android 2.3) bzw. Galaxy S3 (Android 4). Auf dem S3 funktioniert alles ohne Probleme,nicht unter Gingerbred - sobald das Swiperefresh View im Layout ist hagelt es Fehler beim starten.

Code:
11-06 21:39:05.020: E/AndroidRuntime(21310): FATAL EXCEPTION: main
11-06 21:39:05.020: E/AndroidRuntime(21310): java.lang.StackOverflowError
11-06 21:39:05.020: E/AndroidRuntime(21310):     at android.text.Styled.drawDirectionalRun(Styled.java:284)
11-06 21:39:05.020: E/AndroidRuntime(21310):     at android.text.Styled.measureText(Styled.java:447)
11-06 21:39:05.020: E/AndroidRuntime(21310):     at android.text.Layout.measureText(Layout.java:1881)
11-06 21:39:05.020: E/AndroidRuntime(21310):     at android.text.Layout.getLineMax(Layout.java:841)
11-06 21:39:05.020: E/AndroidRuntime(21310):     at android.text.Layout.draw(Layout.java:386)
11-06 21:39:05.020: E/AndroidRuntime(21310):     at android.text.BoringLayout.draw(BoringLayout.java:365)
11-06 21:39:05.020: E/AndroidRuntime(21310):     at android.widget.TextView.onDraw(TextView.java:4299)
11-06 21:39:05.020: E/AndroidRuntime(21310):     at android.view.View.draw(View.java:7036)
11-06 21:39:05.020: E/AndroidRuntime(21310):     at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
11-06 21:39:05.020: E/AndroidRuntime(21310):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
11-06 21:39:05.020: E/AndroidRuntime(21310):     at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
11-06 21:39:05.020: E/AndroidRuntime(21310):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
11-06 21:39:05.020: E/AndroidRuntime(21310):     at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
11-06 21:39:05.020: E/AndroidRuntime(21310):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
11-06 21:39:05.020: E/AndroidRuntime(21310):     at android.view.View.draw(View.java:6936)
11-06 21:39:05.020: E/AndroidRuntime(21310):     at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
11-06 21:39:05.020: E/AndroidRuntime(21310):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
11-06 21:39:05.020: E/AndroidRuntime(21310):     at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
11-06 21:39:05.020: E/AndroidRuntime(21310):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
11-06 21:39:05.020: E/AndroidRuntime(21310):     at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
11-06 21:39:05.020: E/AndroidRuntime(21310):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
11-06 21:39:05.020: E/AndroidRuntime(21310):     at android.view.View.draw(View.java:6936)
11-06 21:39:05.020: E/AndroidRuntime(21310):     at android.support.v4.view.ViewPager.draw(ViewPager.java:2176)
11-06 21:39:05.020: E/AndroidRuntime(21310):     at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
11-06 21:39:05.020: E/AndroidRuntime(21310):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
11-06 21:39:05.020: E/AndroidRuntime(21310):     at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
11-06 21:39:05.020: E/AndroidRuntime(21310):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
11-06 21:39:05.020: E/AndroidRuntime(21310):     at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
11-06 21:39:05.020: E/AndroidRuntime(21310):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
11-06 21:39:05.020: E/AndroidRuntime(21310):     at android.view.View.draw(View.java:6936)
11-06 21:39:05.020: E/AndroidRuntime(21310):     at android.widget.FrameLayout.draw(FrameLayout.java:357)
11-06 21:39:05.020: E/AndroidRuntime(21310):     at android.widget.ScrollView.draw(ScrollView.java:1688)
11-06 21:39:05.020: E/AndroidRuntime(21310):     at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
11-06 21:39:05.020: E/AndroidRuntime(21310):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1380)
11-06 21:39:05.020: E/AndroidRuntime(21310):     at android.view.View.draw(View.java:6936)
11-06 21:39:05.020: E/AndroidRuntime(21310):     at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
11-06 21:39:05.020: E/AndroidRuntime(21310):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
11-06 21:39:05.020: E/AndroidRuntime(21310):     at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
11-06 21:39:05.020: E/AndroidRuntime(21310):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
11-06 21:39:05.020: E/AndroidRuntime(21310):     at android.view.View.draw(View.java:6936)
11-06 21:39:05.020: E/AndroidRuntime(21310):     at android.support.v4.view.ViewPager.draw(ViewPager.java:2176)
11-06 21:39:05.020: E/AndroidRuntime(21310):     at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
11-06 21:39:05.020: E/AndroidRuntime(21310):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
11-06 21:39:05.020: E/AndroidRuntime(21310):     at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
11-06 21:39:05.020: E/AndroidRuntime(21310):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
11-06 21:39:05.020: E/AndroidRuntime(21310):     at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
11-06 21:39:05.020: E/AndroidRuntime(21310):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
11-06 21:39:05.020: E/AndroidRuntime(21310):     at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
11-06 21:39:05.020: E/AndroidRuntime(21310):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
11-06 21:39:05.020: E/AndroidRuntime(21310):     at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
11-06 21:39:05.020: E/AndroidRuntime(21310):     at android.support.v4.widget.DrawerLayout.drawChild(DrawerLayout.java:1057)
11-06 21:39:05.020: E/AndroidRuntime(21310):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
11-06 21:39:05.020: E/AndroidRuntime(21310):     at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
11-06 21:39:05.020: E/AndroidRuntime(21310):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
11-06 21:39:05.020: E/AndroidRuntime(21310):     at android.view.View.draw(View.java:6936)
11-06 21:39:05.020: E/AndroidRuntime(21310):     at android.widget.FrameLayout.draw(FrameLayout.java:357)
11-06 21:39:05.020: E/AndroidRuntime(21310):     at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
11-06 21:39:05.020: E/AndroidRuntime(21310):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
11-06 21:39:05.020: E/AndroidRuntime(21310):     at android.view.View.draw(View.java:6936)
11-06 21:39:05.020: E/AndroidRuntime(21310):     at android.support.v7.internal.widget.ActionBarOverlayLayout.draw(ActionBarOverlayLayout.java:509)
11-06 21:39:05.020: E/AndroidRuntime(21310):     at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
11-06 21:39:05.020: E/AndroidRuntime(21310):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
11-06 21:39:05.020: E/AndroidRuntime(21310):     at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
11-06 21:39:05.020: E/AndroidRuntime(21310):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
11-06 21:39:05.020: E/AndroidRuntime(21310):     at android.view.View.draw(View.java:6936)
11-06 21:39:05.020: E/AndroidRuntime(21310):     at android.widget.FrameLayout.draw(FrameLayout.java:357)
11-06 21:39:05.020: E/AndroidRuntime(21310):     at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1908)
11-06 21:39:05.020: E/AndroidRuntime(21310):     at android.view.ViewRoot.draw(ViewRoot.java:1529)
11-06 21:39:05.020: E/AndroidRuntime(21310):     at android.view.ViewRoot.performTraversals(ViewRoot.java:1265)
11-06 21:39:05.020: E/AndroidRuntime(21310):     at an

App nutzt Actionbar mit AppCompat und die ganzen anderen SupportLibs.

Ein wenig Googlen, meinte als eventuelle Ursache "zu viele nested Views", leider habe ich keine Idee wie man die veringern könnte bzw. mag das nicht glauben. Zumal die ganzen Subfragmente erst in der App inflated werden und somit bei Setcontentview nur die Platzhalter relevant sind.

Wie gesagt, sobal dich das SwipeRefreshLayout raus schmeisse, ist alles in Ordnung.

Hat da jemand eine Idee bzw. selbe Erfahrungen ???
 
Hey,

also das Problem kenn ich mit 2 Fehlerursachen...

Nummer 1 ist dein schon angesprochenes Problem der zu vielen Views/zu tiefe Hierarchien. Mach mal bitte ein Bild von deiner Hierarchie mit dem HierarchyViewer-Tool von den SDK-Tools (liegt bspw. im SDK-Ordner\tools\hierarchyviewer.bat) und lad es hoch, da kann man mal einen Blick drauf werfen. Problematisch bei den SupportLibraries ist z.B., dass die meist zusätzliche Ebenen hinzufügen, was die Hierarchietiefe zusätzlich zu deiner definierten Layouttiefe erhöht (bspw bei Support-Fragments wird eine Ebene nosavestateframelayout im vgl. zu den nativen Fragments hinzugefügt, aber das nur als Anmerkung, hilft dir ja nicht weiter, da du bei API-Level 7 keine nativen Fragments nutzen kannst).

Ein anderes mal hatte ich das Problem, dass ich dummerweise was umbenannt hatte bei meinen Ressourcen (Drawable-XML) und dann es zu einer Rekursion kam, die offenbar neuere Android-Version selbst abgebrochen haben, aber ältere auch in einem StackOverFlow landeten...


Ich gehe aber davon aus, dass ersteres das Problem darstellt.

Aber mal ganz ehrlich, warum willst du noch für API-Level 7 programmieren? Damit halst du dir viel zu viel zusätzliche Last an, dafür, dass die Nutzergruppe viel zu inaktiv und viel zu klein ist! Ich kanns jeden nur empfehlen mind. auf 14 zu gehen, es gibt nun wirklich keinen Grund für Gingerbread...
 
  • Danke
Reaktionen: killphil75
Danke reneph,

du hast recht es ist halt die Stackgröße die unter dem "alten" Android nicht mehr ausreicht und es liegt an den Supportlibs, die wie du schon schriebst einige "Hilfsviews" anlegen. Das kulmuliert halt bis zum großen Knall...

Aber mal ganz ehrlich, warum willst du noch für API-Level 7 programmieren? Damit halst du dir viel zu viel zusätzliche Last an, dafür, dass die Nutzergruppe viel zu inaktiv und viel zu klein ist! Ich kanns jeden nur empfehlen mind. auf 14 zu gehen, es gibt nun wirklich keinen Grund für Gingerbread...

Naja eigentlich supporte ich nur ab API 9 wegen Pushnachrichten, Fragmenten ect.

ich hab eben noch mal in der DevConsole geschaut in der "alten" App waren es noch 11% User, bei der neuen Version sind es immerhin noch 5% User, die ich über Bord werfen müsste, wenn ich API-Min auf 14 anhebe, wird wohl sicherlich der richtige Weg sein, um sich von dem Ballast zu befreien.

PS: Hierachyviewer verweigert hier den Dienst und jammert er sei deprecated - AndroidDevice Monitor liefert mir zwar ne Liste aber keinen Screenshot (muss ich mal suchen)
 
Ja die deprecated-Meldung ist normal, weil das ja auch im DDMS (glaub ich) implementiert ist. Ich benutze den dennoch noch und funktioniert 1a. Eigentlich nur in der Activity-Liste deine Activity von deiner App doppelt drauf klicken, dann kommt die Hierarchie - eigentlich. ^^
 

Ähnliche Themen

W
  • WuDiDong
Antworten
3
Aufrufe
770
jogimuc
J
S
Antworten
4
Aufrufe
995
Sempervivum
S
R
Antworten
3
Aufrufe
1.634
Ritartet
R
Zurück
Oben Unten