14

Native Android App私は特定のバグに直面している場所に取り組んでいAndroid 2.3.3 versions and below Android 3.0 versionます。

Logcat ではコードのすべての行がコンパイルされましたが、最後に非常に奇妙なエラーが発生しているため、コードのどこに落ちているのか正確にはわかりません。

java.lang.StackOverflowError
at java.util.concurrent.locks.ReentrantLock$NonfairSync.tryAcquire(ReentrantLock.java:189)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1171)
at java.util.concurrent.locks.ReentrantLock$NonfairSync.lock(ReentrantLock.java:185)
at java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:261)
at java.util.concurrent.CopyOnWriteArrayList.removeRange(CopyOnWriteArrayList.java:569)
at java.util.concurrent.CopyOnWriteArrayList.remove(CopyOnWriteArrayList.java:366)
at java.util.concurrent.CopyOnWriteArrayList.remove(CopyOnWriteArrayList.java:376)
at android.view.ViewTreeObserver.removeOnPreDrawListener(ViewTreeObserver.java:377)

at android.widget.TextView.onDraw(TextView.java:4085)
at android.view.View.draw(View.java:6986)
at android.view.ViewGroup.drawChild(ViewGroup.java:1739)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1466)
at android.view.ViewGroup.drawChild(ViewGroup.java:1737)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1466)
at android.view.ViewGroup.drawChild(ViewGroup.java:1737)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1466)
at android.view.View.draw(View.java:6989)
at android.view.ViewGroup.drawChild(ViewGroup.java:1739)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1466)
at android.view.View.draw(View.java:6989)
at android.view.ViewGroup.drawChild(ViewGroup.java:1739)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1466)
at android.view.ViewGroup.drawChild(ViewGroup.java:1737)

    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1466)
at android.view.ViewGroup.drawChild(ViewGroup.java:1737)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1466)
at android.view.View.draw(View.java:6989)
at android.view.ViewGroup.drawChild(ViewGroup.java:1739)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1466)
at android.view.View.draw(View.java:6989)
at android.view.ViewGroup.drawChild(ViewGroup.java:1739)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1466)
at android.view.ViewGroup.drawChild(ViewGroup.java:1737)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1466)
at android.view.ViewGroup.drawChild(ViewGroup.java:1737)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1466)
at android.view.View.draw(View.java:6989)
at android.widget.FrameLayout.draw(FrameLayout.java:361)
at android.view.ViewGroup.drawChild(ViewGroup.java:1739)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1466)
at android.view.ViewGroup.drawChild(ViewGroup.java:1737)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1466)

    at android.view.View.draw(View.java:6989)
at android.view.ViewGroup.drawChild(ViewGroup.java:1739)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1466)
at android.view.View.draw(View.java:6989)
at android.view.ViewGroup.drawChild(ViewGroup.java:1739)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1466)
at android.view.View.draw(View.java:7093)
at android.widget.FrameLayout.draw(FrameLayout.java:361)
at android.widget.ScrollView.draw(ScrollView.java:1421)
at android.view.ViewGroup.drawChild(ViewGroup.java:1739)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1466)
at android.view.ViewGroup.drawChild(ViewGroup.java:1737)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1466)
at android.view.View.draw(View.java:6989)
at android.widget.FrameLayout.draw(FrameLayout.java:361)
at android.view.ViewGroup.drawChild(ViewGroup.java:1739)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1466)
at android.view.ViewGroup.d

コードを確認したところ、 stackoverflow の痕跡が見つかりませんでした。Android 3.0以降のバージョンで同じコードを実行すると、効果的かつ正確に実行されますが、Android 2.3.3および3.0未満のバージョンでは実行されません。この問題について知っている人がいたら教えてください??

[編集] タブ アクティビティを使用しているため、メイン レイアウトはMain.xmlであり、そのサブ アクティビティでは firstTab_Results.xml というビューが保持され、実際にinflate_table_firstTab.xml layoutの最大 20 ビューの膨張を実行するテーブル レイアウトが保持されます。

[EDIT 2] とにかく再帰していません。最大 20 個のビュー (inflate_table_firstTab.xml) をテーブル レイアウト (firstTab_Results.xml) に膨張させます。

Note : Stackoverflow happens on single or dual core processor devices & without fullscreen mode .
4

5 に答える 5

1

Android のスタックは、少なくとも 2GB RAM の Samsung Galaxy S3 でも 8K に制限されています。機種によって違うのかわかりません。理由がわからないので、質問したところ、質問が閉じられました。

あなたの Main.xml は非常にネストされており、それを使用するコードが何であれ、スタック オーバーフローを引き起こしている可能性があります。ネストのレベルごとに使用されるスタックの量は実装に依存します。これが、あるバージョンで発生し、他のバージョンでは発生しない理由です。1 つのバージョンは、ネストされた XML の次のレベルを処理する 5 つの関数のチェーンを呼び出すことができ、1 つのバージョンは 20 をチェーンすることができます。

于 2013-11-14T16:59:04.993 に答える
0

ビュー階層を構築するために再帰を使用していますか? StackOverflowError再帰のないa はほとんど見たことがありません。

于 2013-11-08T06:41:09.233 に答える