相关疑难解决方法(0)

java.lang.StackOverFlow错误.怀疑太多意见?

当您收到类似下面的错误(Android 1.5)时,是因为嵌套的ViewGroup太多,还是因为View的总数太大了?是否有任何技巧可以解决它,同时仍然保持您的应用程序相同的外观?

java.lang.StackOverflowError
   at android.text.Styled.measureText(Styled.java:371)
   at android.text.Layout.measureText(Layout.java:1600)
   at android.text.Layout.getLineMax(Layout.java:654)
   at android.text.Layout.draw(Layout.java:310)
   at android.text.BoringLayout.draw(BoringLayout.java:356)
   at android.widget.TextView.onDraw(TextView.java:3921)
   at android.view.View.draw(View.java:5838)
   at android.view.ViewGroup.drawChild(ViewGroup.java:1486)
   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1228)
   at android.view.ViewGroup.drawChild(ViewGroup.java:1484)
   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1228)
   at android.widget.AbsListView.dispatchDraw(AbsListView.java:1319)
   at android.widget.ListView.dispatchDraw(ListView.java:2820)
   at android.view.View.draw(View.java:5944)
   at android.widget.AbsListView.draw(AbsListView.java:2121)
   at android.view.ViewGroup.drawChild(ViewGroup.java:1486)
   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1228)
   at android.view.ViewGroup.drawChild(ViewGroup.java:1484)
   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1228)
   at android.view.View.draw(View.java:5841)
   at android.widget.FrameLayout.draw(FrameLayout.java:352)
   at android.view.ViewGroup.drawChild(ViewGroup.java:1486)
   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1228)
   at android.view.ViewGroup.drawChild(ViewGroup.java:1484)
   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1228)
   at android.view.View.draw(View.java:5841)
   at android.widget.FrameLayout.draw(FrameLayout.java:352)
   at android.view.ViewGroup.drawChild(ViewGroup.java:1486)
   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1228)
   at android.view.View.draw(View.java:5841)
   at android.view.ViewGroup.drawChild(ViewGroup.java:1486)
   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1228)
   at android.view.View.draw(View.java:5841)
   at android.view.ViewGroup.drawChild(ViewGroup.java:1486)
   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1228)
   at android.view.View.draw(View.java:5841)
   at android.widget.FrameLayout.draw(FrameLayout.java:352)
   at android.view.ViewGroup.drawChild(ViewGroup.java:1486)
   at …
Run Code Online (Sandbox Code Playgroud)

android android-layout android-view

23
推荐指数
3
解决办法
3万
查看次数

仅限Android 2.3.3设备上的Stackoverflow

我一直在努力在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) …
Run Code Online (Sandbox Code Playgroud)

java stack-overflow android android-sdk-2.3

14
推荐指数
2
解决办法
2850
查看次数

Android线程的最大数量

我想知道是否有最大数量的线程可以在Android设备上运行.这取决于设备的类型?

java multithreading android

10
推荐指数
1
解决办法
9794
查看次数

在Android中手动创建UI线程以增加其小堆栈大小

我在主UI线程中遇到 StackOverflowErrors(相关问题).我的应用针对的是Android 2.3+.在Android 4上一切都很好,但是在绘制视图布局时我在2.3.3上崩溃了.

显而易见的答案是优化我的视图布局并减少嵌套视图的数量.这是一个问题,因为大量的视图是由于我使用支持库和标签片段 - 这是推荐的方法.我不想改变我的设计并删除片段只是因为较旧的操作系统有一个小堆栈.

我正在寻找增加UI线程的堆栈大小的方法.我已经看到了这是不可能的答案,我明白清单中没有简单的设置可以做到这一点.但是,我仍然不满意没有手动解决方法.

到目前为止我最好的想法:

创建一个具有更大堆栈的新工作线程(Thread类).可以增加工作线程的堆栈大小.然后,以某种方式将此线程转换为新的UI线程.怎么样?

  • 浏览android.app.Activity .attach(..)的Android源代码我已经看到一个活动将自己附加到UI线程.也许有一些方法来替换它附加的线程并将其更改为我的"新"UI线程

  • 更深入到android.app.ActivityThread .startActivityNow(..),也许我将能够手动启动我的活动.创建活动后,它会自动将其自身附加到创建它的线程上.也许如果我从我的新UI线程运行它,它将工作.

  • 如果我创建一个新的UI线程,我将不得不为它手动创建Looper.我从android.app.ActivityThread .main(..)中了解了需要创建的内容.

其他想法:

  • 手动捕获StackOverflowError并在发生时异步移动调用,以便它们具有较小的堆栈.我在这里看到了这个好主意,但我无法让它发挥作用.

  • NDK线程(通过JNI)具有大堆栈.我想为了我的利益使用它们,但我认为没办法做到这一点.所有通过JNI的调用都是在自己的线程上执行的,所以我看不出如何使用NDK线程进行UI访问.

所以..

除了说这是一个非常糟糕的想法,还有其他任何建议或提示吗?你能找到做类似事情的人吗?我不能......

android android-sdk-2.3

8
推荐指数
1
解决办法
1498
查看次数

可以嵌套在单个XML文件中的LinearLayout的最大数量?

可以嵌套的LinearLayouts的最大数量是多少?它是无限的,还是Android-studio强调的限制?或者该设备是否依赖?

xml android android-studio

4
推荐指数
1
解决办法
1255
查看次数