StackOverflowError,因为Android中的视图层次结构太深

时间:2015-01-29 14:23:35

标签: android android-layout view-hierarchy

我们在Play商店中收到了一些此类崩溃报告:

java.lang.StackOverflowError
at android.graphics.Paint.getTextRunAdvances(Paint.java:1753)
at android.graphics.Paint.getTextRunAdvances(Paint.java:1726)
at android.text.TextLine.handleText(TextLine.java:758)
at android.text.TextLine.handleRun(TextLine.java:981)
at android.text.TextLine.measureRun(TextLine.java:425)
at android.text.TextLine.measure(TextLine.java:299)
at android.text.TextLine.metrics(TextLine.java:273)
.
.
.
.
at android.view.View.draw(View.java:11069)
at android.widget.FrameLayout.draw(FrameLayout.java:450)
at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2203)
at android.view.View.getDisplayList(View.java:10505)
at android.view.HardwareRenderer$GlRenderer.draw(HardwareRenderer.java:876)
at android.view.ViewRootImpl.draw(ViewRootImpl.java:1916)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1640)
at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2454)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4477)
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:788)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:555)
at dalvik.system.NativeStart.main(Native Method)

我们在其中一个测试设备上遇到了这样的异常,结果是由于视图层次结构的最大深度。 我知道最大深度的建议是<10。 但是,如果你有一个相当复杂的应用程序,这个值是非常雄心勃勃的。 我们在Main-Acitivity with Fragments上使用AppCompat v21和ViewPager。

出于这个原因,我认为我们有很多没有意义的&#34;视图,简单地封装了一个孩子。 或者以下布局的目的是什么:

-NoSaveStateFrameLayout

-NativeActionModeAwareLayout

-FitWindowsFrameLayout

总的来说,我们的总深度为23,包括PhoneWindowDecorView。 我们的Viewtree看起来像这样:

Picture from Hierarchy View

RootView的第一个视图:

Picture from Hierarchy View

尽管如此,我们的应用程序甚至适用于非常老旧的Android 2.3设备。 为什么问题仍然存在于现实世界中。

0 个答案:

没有答案