Was ist die android-UI-thread-stack-Größe zu begrenzen, und wie Sie zu überwinden?

Ich bin immer java.lang.StackOverflowErrors, wenn meine Sicht der Hierarchie wird gezeichnet:

at android.view.View.draw(View.java:6880)
at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
at android.view.View.draw(View.java:6883)
at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
...

Forschung Punkte meiner Ansicht Hierarchie zu tief für Android zu behandeln. In der Tat, mit Hierarchie-Viewer, kann ich sehen, dass meine längste Schachtelung 19 Ansichten (!)

Meine app sieht ein wenig wie der Google Play store app (mit swipe tabs). Jede Registerkarte ist eine verschachtelte fragment innerhalb eines fragment-view pager - Verwendung v4 Unterstützung und HoloEverywhere. Offensichtlich, das ist, warum meine Hierarchie ist mittlerweile ein bisschen verrückt.

Meine Fragen:

  1. Was ist der real stack-Größe zu begrenzen? Ich fand keine Möglichkeit zu Messen, die stack-Größe der UI-thread. Einige Gerüchte im Netz sagen, 8KB, aber es ist ein Weg, um dies zu Messen genau auf einige Beispiel-Geräte?

  2. Übernimmt die stack-Größe-limit ändern mit OS ver? Die gleiche Hierarchie gilt nicht crash auf einer 4.0.3-Gerät, aber Abstürzen tut Sie auf eine 2.3.3-Gerät (identische hardware). Warum ist das so?

  3. Gibt es eine Lösung außer der Optimierung der Hierarchie manuell? Ich fand keinen Weg, um zu erhöhen, die lächerlich kleinen Stapel von dem UI-thread. Sorry, aber 60-100 stack frame limit ist ein Witz.

  4. Vorausgesetzt es gibt keine Wunder-Lösung auf #3, Empfehlungen für, wo der Kern Hierarchie Optimierung getan werden sollte?

  5. Verrückte Idee - ich habe bemerkt, dass jede view-Schicht fügt über 3 Funktionsaufrufe ("Ansicht".zeichnen, ViewGroup.dispatchDraw, ViewGroup.drawChild). Vielleicht kann ich meine eigene ViewGroup Umsetzung (eigene layouts), das ist weniger verschwenderisch auf stack während der draw()?

  • Eine Idee, die in etwa meine verrückte Idee #5: stackoverflow.com/questions/6705425/...
  • Um zu klären, die Argumentation hinter der Suche nach der stack-Größe ist die Schätzung der Größe des Marktes, die problematisch ist. Da neuere Versionen des OS zu haben scheinen größere stacks, wollte ich herausfinden, wo ich bin anfällig für Abstürze und sehen, ob ich damit Leben kann
  • Solltest du wirklich angehen, dass die 19-Ebene geschachtelte view-Hierarchie(die nicht wirklich sich zu rechtfertigen). sehen Sie, wenn ich kann mit Ihr Leben und mit Ihr Leben, wie? Sie lassen Sie einfach das Gerät zum Absturz(zusammen mit Ihrem app-Bewertung)? Lebkuchen dauert etwa 40% des Marktes und das kombiniert mit schlechter hardware führt zu einer deutlichen Prozent des Marktes nicht erfüllen Ihre Anforderungen(noch schlimmer, Sie könnte den Umgang mit zufälligen Gerät stürzt ab).
  • Ok, die Optimierung von 19 bis unter kommt mit einem Preis, natürlich. Wie tief sollte ich gehen? Ich habe versucht, eine Art der Messung, so kann ich berechnen, wie genau sichere ich spielen möchte. Nur zufällig sagen max 15 Stufen ist ein bisschen gibt, für mich..
  • groups.google.com/forum/?fromgroups#!Thema/android-Entwickler/...
  • Danke Sam, aber dies funktioniert nur auf einem "worker thread" ich bin manuell erstellen. Leider bin ich nicht die, die die Erstellung der UI-thread
  • Der kleine stack-Größe ist ein größeres Problem für Daten-Serialisierung ist die Verwendung der Rekursion.

InformationsquelleAutor talkol | 2013-05-30
Schreibe einen Kommentar