计算器:通过嵌套的看法引起的?嵌套、计算器、看法

2023-09-12 02:12:27 作者:〃涂白你给我的黑色记忆

我刷新内部的SlidingTray视图(定制SlidingDrawer从上面来了),当有一个崩溃。

我不知道是什么导致它..但我的第一个猜测是,这是由于嵌套布局的数量...

什么是嵌套布局的最大数目?

它是特定的设备,我怎么能知道,如果是这样的原因是什么?

如果不是的话,这些事情造成的呢..是什么?

该堆栈跟踪:

  E / AndroidRuntime(2199):致命异常:主要
E / AndroidRuntime(2199):java.lang.StackOverflowError
E / AndroidRuntime(2199):在android.graphics.Paint.measureText(Paint.java:1057)
E / AndroidRuntime(2199):在android.text.Styled.drawDirectionalRun(Styled.java:267)
E / AndroidRuntime(2199):在android.text.Styled.measureText(Styled.java:430)
E / AndroidRuntime(2199):在android.text.Layout.measureText(Layout.java:1655)
E / AndroidRuntime(2199):在android.text.Layout.getLineMax(Layout.java:689)
E / AndroidRuntime(2199):在android.text.Layout.draw(Layout.java:340)
E / AndroidRuntime(2199):在android.text.BoringLayout.draw(BoringLayout.java:365)
E / AndroidRuntime(2199):在android.widget.TextView.onDraw(TextView.java:4168)
E / AndroidRuntime(2199):在android.view.View.draw(View.java:6880)
E / AndroidRuntime(2199):在android.view.ViewGroup.drawChild(ViewGroup.java:1646)
E / AndroidRuntime(2199):在android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
E / AndroidRuntime(2199):在android.view.ViewGroup.drawChild(ViewGroup.java:1644)
E / AndroidRuntime(2199):在android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
E / AndroidRuntime(2199):在android.view.ViewGroup.drawChild(ViewGroup.java:1644)
E / AndroidRuntime(2199):在android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
E / AndroidRuntime(2199):在android.view.View.draw(View.java:6883)
E / AndroidRuntime(2199):在android.widget.FrameLayout.draw(FrameLayout.java:357)
E / AndroidRuntime(2199):在android.widget.ScrollView.draw(ScrollView.java:1409)
E / AndroidRuntime(2199):在android.view.ViewGroup.drawChild(ViewGroup.java:1646)
E / AndroidRuntime(2199):在android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
E / AndroidRuntime(2199):在android.view.ViewGroup.drawChild(ViewGroup.java:1644)
E / AndroidRuntime(2199):在android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
E / AndroidRuntime(2199):在android.view.View.draw(View.java:6883)
E / AndroidRuntime(2199):在android.view.ViewGroup.drawChild(ViewGroup.java:1646)
E / AndroidRuntime(2199):在android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
E / AndroidRuntime(2199):在android.view.View.buildDrawingCache(View.java:6640)
E / AndroidRuntime(2199):在android.view.View.getDrawingCache(View.java:6428)
E / AndroidRuntime(2199):在android.view.ViewGroup.drawChild(ViewGroup.java:1571)
E / AndroidRuntime(2199):在android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
E / AndroidRuntime(2199):在android.view.ViewGroup.drawChild(ViewGroup.java:1644)
E / AndroidRuntime(2199):在android.view.ViewGroup.dispatchDraw(ViewGroup.java:1392)
E / AndroidRuntime(2199):在android.view.ViewGroup.drawChild(ViewGroup.java:1644)
E / AndroidRuntime(2199):在android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
E / AndroidRuntime(2199):在android.view.ViewGroup.drawChild(ViewGroup.java:1644)
E / AndroidRuntime(2199):在android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
E / AndroidRuntime(2199):在android.view.ViewGroup.drawChild(ViewGroup.java:1644)
E / AndroidRuntime(2199):在android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
E / AndroidRuntime(2199):在android.view.View.draw(View.java:6883)
E / AndroidRuntime(2199):在android.widget.FrameLayout.draw(FrameLayout.java:357)
E / AndroidRuntime(2199):在android.widget.ScrollView.draw(ScrollView.java:1409)
E / AndroidRuntime(2199):在android.view.ViewGroup.drawChild(ViewGroup.java:1646)
E / AndroidRuntime(2199):在android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
E / AndroidRuntime(2199):在android.view.ViewGroup.drawChild(ViewGroup.java:1644)
E / AndroidRuntime(2199):在android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
E / AndroidRuntime(2199):在android.view.ViewGroup.drawChild(ViewGroup.java:1644)
E / AndroidRuntime(2199):在android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
E / AndroidRuntime(2199):在android.view.View.draw(View.java:6986)
E / AndroidRuntime(2199):在android.widget.FrameLayout.draw(FrameLayout.java:357)
E / AndroidRuntime(2199):在android.widget.Horizo​​ntalScrollView.draw(Horizo​​ntalScrollView.java:1409)
E / AndroidRuntime(2199):在android.view.ViewGroup.drawChild(ViewGroup.java:1646)
E / AndroidRuntime(2199):在android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
E / AndroidRuntime(2199):在android.view.View.draw(View.java:6883)
E / AndroidRuntime(2199):在android.view.ViewGroup.drawChild(ViewGroup.java:1646)
E / AndroidRuntime(2199):在android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
E / AndroidRuntime(2199):在android.view.View.draw(View.java:6883)
E / AndroidRuntime(2199):在android.view.ViewGroup.drawChild(ViewGroup.java:1646)
E / AndroidRuntime(2199):在com.vodafone.onm.components.SlidingTray.dispatchDraw(SlidingTray.java:426)
E / AndroidRuntime(2199):在android.view.ViewGroup.drawChild(ViewGroup.java:1644)
E / AndroidRuntime(2199):在android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
E / AndroidRuntime(2199):在android.view.ViewGroup.drawChild(ViewGroup.java:1644)
E / AndroidRuntime(2199):在android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
E / AndroidRuntime(2199):在android.view.ViewGroup.drawChild(ViewGroup.java:1644)
E / AndroidRuntime(2199):在android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
E / AndroidRuntime(2199):在android.view.View.draw(View.java:6883)
E / AndroidRuntime(2199):在android.widget.FrameLayout.draw(FrameLayout.java:357)
E / AndroidRuntime(2199):在android.view.ViewGroup.drawChild(ViewGroup.java:1646)
E / AndroidRuntime(2199):在android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
E / AndroidRuntime(2199):在android.view.View.draw(View.java:6883)
E / AndroidRuntime(2199):在android.widget.FrameLayout.draw(FrameLayout.java:357)
E / AndroidRuntime(2199):在com.android.internal.policy.impl.PhoneWindow $ DecorView.draw(PhoneWindow.java)
 

更新: 层次浏览器快照的

http://d.pr/kXnp

若干思考,我认为是相关的:的 http://www.mail-archive.com/android-developers@googlegroups.com/msg48036.html

解决方案   

什么是嵌套布局的最大数目?

没有特定的值。您运行的堆栈空间,当你用完堆栈空间,这将取决于你在做什么而定。主应用程序线程都有一个8KB堆栈,最后我听到了。

怎样正确认识计算器中的符号 二

这就是说,如果层次视图呈现出深度为10或更多(根最深的叶子),我开始变得紧张,以及15,你很可能会开始运行到异常。你的形象,这是几乎难以辨认,似乎有一个深度比大幅上涨。

您似乎有一些浪费层。如果你有一个层层次结构视图中,关键路径,即有一个家长和一个孩子上,这是一个总理候选人被删除,因为它可能不会增加任何价值。您有至少5这些候选人。即使清洗所有的,多达未必是足够的,但它是一个起点。

I'm having a crash when refreshing a view inside a SlidingTray (custom SlidingDrawer coming from the top).

I'm not sure what causing it.. but my first guess is that it's due to the number of nested layouts...

What is the maximum number of nested layouts?

Is it device specific, how can I be sure if that's the cause?

If it's not, any of these things is causing it.. what is?

The stacktrace:

E/AndroidRuntime( 2199): FATAL EXCEPTION: main
E/AndroidRuntime( 2199): java.lang.StackOverflowError
E/AndroidRuntime( 2199): at android.graphics.Paint.measureText(Paint.java:1057)
E/AndroidRuntime( 2199): at android.text.Styled.drawDirectionalRun(Styled.java:267)
E/AndroidRuntime( 2199): at android.text.Styled.measureText(Styled.java:430)
E/AndroidRuntime( 2199): at android.text.Layout.measureText(Layout.java:1655)
E/AndroidRuntime( 2199): at android.text.Layout.getLineMax(Layout.java:689)
E/AndroidRuntime( 2199): at android.text.Layout.draw(Layout.java:340)
E/AndroidRuntime( 2199): at android.text.BoringLayout.draw(BoringLayout.java:365)
E/AndroidRuntime( 2199): at android.widget.TextView.onDraw(TextView.java:4168)
E/AndroidRuntime( 2199): at android.view.View.draw(View.java:6880)
E/AndroidRuntime( 2199): at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
E/AndroidRuntime( 2199): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
E/AndroidRuntime( 2199): at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
E/AndroidRuntime( 2199): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
E/AndroidRuntime( 2199): at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
E/AndroidRuntime( 2199): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
E/AndroidRuntime( 2199): at android.view.View.draw(View.java:6883)
E/AndroidRuntime( 2199): at android.widget.FrameLayout.draw(FrameLayout.java:357)
E/AndroidRuntime( 2199): at android.widget.ScrollView.draw(ScrollView.java:1409)
E/AndroidRuntime( 2199): at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
E/AndroidRuntime( 2199): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
E/AndroidRuntime( 2199): at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
E/AndroidRuntime( 2199): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
E/AndroidRuntime( 2199): at android.view.View.draw(View.java:6883)
E/AndroidRuntime( 2199): at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
E/AndroidRuntime( 2199): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
E/AndroidRuntime( 2199): at android.view.View.buildDrawingCache(View.java:6640)
E/AndroidRuntime( 2199): at android.view.View.getDrawingCache(View.java:6428)
E/AndroidRuntime( 2199): at android.view.ViewGroup.drawChild(ViewGroup.java:1571)
E/AndroidRuntime( 2199): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
E/AndroidRuntime( 2199): at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
E/AndroidRuntime( 2199): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1392)
E/AndroidRuntime( 2199): at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
E/AndroidRuntime( 2199): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
E/AndroidRuntime( 2199): at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
E/AndroidRuntime( 2199): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
E/AndroidRuntime( 2199): at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
E/AndroidRuntime( 2199): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
E/AndroidRuntime( 2199): at android.view.View.draw(View.java:6883)
E/AndroidRuntime( 2199): at android.widget.FrameLayout.draw(FrameLayout.java:357)
E/AndroidRuntime( 2199): at android.widget.ScrollView.draw(ScrollView.java:1409)
E/AndroidRuntime( 2199): at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
E/AndroidRuntime( 2199): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
E/AndroidRuntime( 2199): at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
E/AndroidRuntime( 2199): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
E/AndroidRuntime( 2199): at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
E/AndroidRuntime( 2199): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
E/AndroidRuntime( 2199): at android.view.View.draw(View.java:6986)
E/AndroidRuntime( 2199): at android.widget.FrameLayout.draw(FrameLayout.java:357)
E/AndroidRuntime( 2199): at android.widget.HorizontalScrollView.draw(HorizontalScrollView.java:1409)
E/AndroidRuntime( 2199): at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
E/AndroidRuntime( 2199): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
E/AndroidRuntime( 2199): at android.view.View.draw(View.java:6883)
E/AndroidRuntime( 2199): at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
E/AndroidRuntime( 2199): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
E/AndroidRuntime( 2199): at android.view.View.draw(View.java:6883)
E/AndroidRuntime( 2199): at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
E/AndroidRuntime( 2199): at com.vodafone.onm.components.SlidingTray.dispatchDraw(SlidingTray.java:426)
E/AndroidRuntime( 2199): at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
E/AndroidRuntime( 2199): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
E/AndroidRuntime( 2199): at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
E/AndroidRuntime( 2199): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
E/AndroidRuntime( 2199): at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
E/AndroidRuntime( 2199): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
E/AndroidRuntime( 2199): at android.view.View.draw(View.java:6883)
E/AndroidRuntime( 2199): at android.widget.FrameLayout.draw(FrameLayout.java:357)
E/AndroidRuntime( 2199): at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
E/AndroidRuntime( 2199): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
E/AndroidRuntime( 2199): at android.view.View.draw(View.java:6883)
E/AndroidRuntime( 2199): at android.widget.FrameLayout.draw(FrameLayout.java:357)
E/AndroidRuntime( 2199): at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java)

UPDATE: Hierarchy Viewer Snapshot

http://d.pr/kXnp

.

Some thinks I think are related: http://www.mail-archive.com/android-developers@googlegroups.com/msg48036.html

解决方案

What is the maximum number of nested layouts?

There is no specific value. You run out of stack space when you run out of stack space, and that will be contingent upon what you are doing. The main application thread has an 8KB stack, last I heard.

That being said, if Hierarchy View is showing a depth of 10 or more (root to deepest leaf), I start to get nervous, and by 15 you are likely to start running into exceptions. Your image, which is nearly illegible, appears to have a depth substantially higher than that.

You seem to have a number of wasted layers. If you have a layer in Hierarchy View, on the critical path, that has one parent and one child, that is a prime candidate to be removed, as it may not be adding any value. You have at least 5 of these candidates. Even cleaning all of that up may not be sufficient, but it is a starting point.