Riz*_*van 14 java stack-overflow android android-sdk-2.3
我一直在努力在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
Run Code Online (Sandbox Code Playgroud)
当我检查我的代码时,我发现stackoverflow没有跟踪.当我在Android 3.0或更高版本上运行相同的代码时,它运行有效和正确但不在Android 2.3.3及以下3.0版本.如果有人知道这个问题,请告诉我吗?
[编辑]我正在使用Tab活动,因此主要布局是Main.xml,并且该子活动包含名为firstTab_Results.xml的视图,它包含一个表布局,它确实执行inflate_table_firstTab.xml布局的最多20个视图的膨胀.
[编辑2]无论如何我没有递归它,它将Max 20个视图(inflate_table_firstTab.xml)扩展到表格布局(firstTab_Results.xml).
Note : Stackoverflow happens on single or dual core processor devices & without fullscreen mode .
Run Code Online (Sandbox Code Playgroud)
laa*_*lto 19
您的视图层次结构太深.当递归地绘制层次结构时,您将耗尽堆栈空间,并且不能在层次结构中更深入,如堆栈跟踪中所观察到的那样.
为什么这只发生在早期的设备中是因为Android 2.3设备中的UI线程堆栈大小仅为12kB,而后来的OS版本中为16kB(参考).
如何减少视图层次深度?尽可能避免嵌套布局.您发布的布局过于复杂,在此Stack Overflow模型中无需为您修复它们(正确执行需要一些时间,而且可能太具体而无法帮助其他人),但这里有一些通用指南:
删除不必要的布局.例如,在您的firsttab_results.xml中,您只需要TableLayout,RelativeLayout而且LinearLayout在顶部几乎没用.在你ScrollView有至少6个嵌套布局时,一个或最多两个可能就足够了.
布局中的单个孩子是代码气味.大多数情况下,可以将子项移动到其父布局并使用边距调整布局.
通常没有必要在布局内部放置布局RelativeLayout.相对布局在使用相对定位和子基线对齐来布置其子项时非常有用.
如果您只需要a的嵌套布局background,请尝试将背景移动到例如View与嵌套布局大小相同的布局,并在其上面布置其他元素.
注意Android Lint警告.该工具已经非常擅长检测可以简化的视图层次结构复杂性.
您有嵌套的视图层次结构,您可以使用 android中的hierarchyViewer查看您的视图层次结构.如果你的应用程序中有许多嵌套视图,那么那些内存较小的设备会产生异常,而其他设备则运行良好.平滑你的视图.使用RelativeLayout来展平视图.
| 归档时间: |
|
| 查看次数: |
2850 次 |
| 最近记录: |