

Android2.x 系の端末にて、Activity のレイアウト XML
に`android.support.v4.widget.DrawerLayout` を適用したところ、下記のような `StackOverflowError`
が発生して強制終了します。

同様の不具合情報を探していたところ、レイアウト階層が深すぎて発生するという問題という情報があり、原因特定の手段として試験的に一階層下げてみましたが、やはり同様の異常終了が発生してしています。

`DrawerLayout` を使用しなければ発生しないため、これに起因することは間違いないのですが、有効な手段がわかっていない状況です。
(現状これ以上の階層構造を変更することも難しい状況でもあります)

上記問題について、有効な手段をご存じの方がいらっしゃいましたら教えて下さい。

[code]

    01-29 17:25:36.660: E/AndroidRuntime(24284): FATAL EXCEPTION: main
    01-29 17:25:36.660: E/AndroidRuntime(24284): java.lang.StackOverflowError
    01-29 17:25:36.660: E/AndroidRuntime(24284):    at java.lang.String.getChars(String.java:1026)
    01-29 17:25:36.660: E/AndroidRuntime(24284):    at android.text.SpannableStringInternal.getChars(SpannableStringInternal.java:70)
    01-29 17:25:36.660: E/AndroidRuntime(24284):    at android.text.TextUtils.getChars(TextUtils.java:69)
    01-29 17:25:36.660: E/AndroidRuntime(24284):    at android.text.Layout$Ellipsizer.getChars(Layout.java:2155)
    01-29 17:25:36.660: E/AndroidRuntime(24284):    at android.text.TextUtils.getChars(TextUtils.java:69)
    01-29 17:25:36.660: E/AndroidRuntime(24284):    at android.graphics.Canvas.drawText(Canvas.java:1310)
    01-29 17:25:36.660: E/AndroidRuntime(24284):    at android.text.Styled.drawUniformRun(Styled.java:151)
    01-29 17:25:36.660: E/AndroidRuntime(24284):    at android.text.Styled.drawDirectionalRun(Styled.java:317)
    01-29 17:25:36.660: E/AndroidRuntime(24284):    at android.text.Styled.drawText(Styled.java:376)
    01-29 17:25:36.660: E/AndroidRuntime(24284):    at android.text.Layout.drawText(Layout.java:1667)
    01-29 17:25:36.660: E/AndroidRuntime(24284):    at android.text.Layout.draw(Layout.java:483)
    01-29 17:25:36.660: E/AndroidRuntime(24284):    at android.widget.TextView.onDraw(TextView.java:4481)
    01-29 17:25:36.660: E/AndroidRuntime(24284):    at android.view.View.draw(View.java:7080)
    01-29 17:25:36.660: E/AndroidRuntime(24284):    at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
    01-29 17:25:36.660: E/AndroidRuntime(24284):    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
    01-29 17:25:36.660: E/AndroidRuntime(24284):    at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
    01-29 17:25:36.660: E/AndroidRuntime(24284):    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
    01-29 17:25:36.660: E/AndroidRuntime(24284):    at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
    01-29 17:25:36.660: E/AndroidRuntime(24284):    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
    01-29 17:25:36.660: E/AndroidRuntime(24284):    at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
    01-29 17:25:36.660: E/AndroidRuntime(24284):    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
    01-29 17:25:36.660: E/AndroidRuntime(24284):    at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
    01-29 17:25:36.660: E/AndroidRuntime(24284):    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
    01-29 17:25:36.660: E/AndroidRuntime(24284):    at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
    01-29 17:25:36.660: E/AndroidRuntime(24284):    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
    01-29 17:25:36.660: E/AndroidRuntime(24284):    at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
    01-29 17:25:36.660: E/AndroidRuntime(24284):    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
    01-29 17:25:36.660: E/AndroidRuntime(24284):    at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
    01-29 17:25:36.660: E/AndroidRuntime(24284):    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
    01-29 17:25:36.660: E/AndroidRuntime(24284):    at android.view.View.draw(View.java:7083)
    01-29 17:25:36.660: E/AndroidRuntime(24284):    at android.widget.FrameLayout.draw(FrameLayout.java:357)
    01-29 17:25:36.660: E/AndroidRuntime(24284):    at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
    01-29 17:25:36.660: E/AndroidRuntime(24284):    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
    01-29 17:25:36.660: E/AndroidRuntime(24284):    at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
    01-29 17:25:36.660: E/AndroidRuntime(24284):    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
    01-29 17:25:36.660: E/AndroidRuntime(24284):    at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
    01-29 17:25:36.660: E/AndroidRuntime(24284):    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
    01-29 17:25:36.660: E/AndroidRuntime(24284):    at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
    01-29 17:25:36.660: E/AndroidRuntime(24284):    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
    01-29 17:25:36.660: E/AndroidRuntime(24284):    at android.view.View.buildDrawingCache(View.java:6840)
    01-29 17:25:36.660: E/AndroidRuntime(24284):    at android.view.View.getDrawingCache(View.java:6628)
    01-29 17:25:36.660: E/AndroidRuntime(24284):    at android.view.ViewGroup.drawChild(ViewGroup.java:1571)
    01-29 17:25:36.660: E/AndroidRuntime(24284):    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
    01-29 17:25:36.660: E/AndroidRuntime(24284):    at android.widget.AbsListView.dispatchDraw(AbsListView.java:1686)
    01-29 17:25:36.660: E/AndroidRuntime(24284):    at android.widget.ListView.dispatchDraw(ListView.java:3211)
    01-29 17:25:36.660: E/AndroidRuntime(24284):    at android.view.View.draw(View.java:7083)
    01-29 17:25:36.660: E/AndroidRuntime(24284):    at android.widget.AbsListView.draw(AbsListView.java:3096)
    01-29 17:25:36.660: E/AndroidRuntime(24284):    at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
    01-29 17:25:36.660: E/AndroidRuntime(24284):    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
    01-29 17:25:36.660: E/AndroidRuntime(24284):    at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
    01-29 17:25:36.660: E/AndroidRuntime(24284):    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
    01-29 17:25:36.660: E/AndroidRuntime(24284):    at android.view.View.draw(View.java:7083)
    01-29 17:25:36.660: E/AndroidRuntime(24284):    at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
    01-29 17:25:36.660: E/AndroidRuntime(24284):    at android.support.v4.widget.DrawerLayout.drawChild(DrawerLayout.java:870)
    01-29 17:25:36.660: E/AndroidRuntime(24284):    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
    01-29 17:25:36.660: E/AndroidRuntime(24284):    at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
    01-29 17:25:36.660: E/AndroidRuntime(24284):    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
    01-29 17:25:36.660: E/AndroidRuntime(24284):    at android.view.View.draw(View.java:7083)
    01-29 17:25:36.660: E/AndroidRuntime(24284):    at android.widget.FrameLayout.draw(FrameLayout.java:357)
    01-29 17:25:36.660: E/AndroidRuntime(24284):    at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
    01-29 17:25:36.660: E/AndroidRuntime(24284):    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
    01-29 17:25:36.660: E/AndroidRuntime(24284):    at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
    01-29 17:25:36.660: E/AndroidRuntime(24284):    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
    01-29 17:25:36.660: E/AndroidRuntime(24284):    at android.view.View.draw(View.java:7083)
    01-29 17:25:36.660: E/AndroidRuntime(24284):    at android.widget.FrameLayout.draw(FrameLayout.java:357)
    01-29 17:25:36.660: E/AndroidRuntime(24284):    at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
    01-29 17:25:36.660: E/AndroidRuntime(24284):    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
    01-29 17:25:36.660: E/AndroidRuntime(24284):    at android.view.View.draw(View.java:7083)
    01-29 17:25:36.660: E/AndroidRuntime(24284):    at android.widget.FrameLayout.draw(FrameLayout.java:357)
    01-29 17:25:36.660: E/AndroidRuntime(24284):    at com.android.internal.policy.impl.PhoneWind
    
[/code]


CC BY-SA 3.0
2015-01-29T11:24:12.070
5571
2016-04-16T23:10:08.913
2015-02-20T15:14:57.927
7572
944
question
android java android-layout
画面描画時に StackOverflowError が発生する


レイアウトが分からないので助けになるか全く分からないのですが、`<merge />`タグを活用する余地は無いでしょうか。


CC BY-SA 3.0
2015-02-09T07:55:33.117
6184
2015-02-20T15:35:17.470
2015-02-20T15:35:17.470
7572
5571
answer


android.support.v4.widget.DrawerLayoutを使って、まずは単純なレイアウトを作成して  
徐々に階層を深めていき、どの段階でstack overflowになるのかを調べ、  
実際に使いたいコードとの差異を見ると原因が切り分けできるかもしれません。

・参考記事  
layoutoptを用いて、レイアウトを最適化する  
<http://techbooster.jpn.org/andriod/application/8016/>


CC BY-SA 3.0
2015-04-22T03:17:01.857
9436
2015-04-22T03:17:01.857
4334
5571
answer


RelativeLayoutを使うと複雑なレイアウトでも少ない階層で実現できることが多いです。  
使っていなければ試してみてください。


CC BY-SA 3.0
2015-04-22T12:06:13.497
9458
2015-04-22T12:06:13.497
3416
5571
answer