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)
テスト デバイスの 1 つでこのような例外が発生し、それはビュー階層の最大深度が原因であることが判明しました。最大深度の推奨値が 10 未満であることはわかっています。ただし、かなり複雑なアプリを使用している場合、この値は非常に野心的です。Main-Activity と Fragments で AppCompat v21 と ViewPager を使用します。
このため、1人の子供を単純にカプセル化する「無意味な」ビューがたくさんあると思います。または、次のレイアウトの目的は何ですか:
-NoSaveStateFrameLayout
-NativeActionModeAwareLayout
-FitWindowsFrameLayout
全体として、PhoneWindowDecorView を含めて合計 23 の深さに到達します。ビューツリーは次のようになります。
RootView からの最初のビュー:
それにもかかわらず、私たちのアプリは非常に古く貧弱な Android 2.3 デバイスでも動作します。現実の世界で問題が依然として発生するのはなぜですか。