Android致命信号错误11 SIGSEGV关于不同版本的JellyBean

时间:2013-08-10 04:45:15

标签: java android adt nexus-7

我的同事和我在使用Android Canvas对象时遇到了非常奇怪的行为。

我们正在处理初始化的画布对象,并且有选择地在2个Nexus 7平板电脑之间获得致命信号11错误;其中一个运行4.2.2并且工作正常,另一个运行4.3并崩溃。我们正试图弄清楚如何解决问题,包括确定错误是我们自己的问题,还是Android API中的一些小故障(不太可能)。

当我们尝试在对象上调用canvas.getWidth()时会发生错误。

我们的Java代码:(不是说它可能很重要,但是Rect来自我们的代码库,它不是android.graphics.Rect


public Rect getViewportBounds() { 
    Canvas can = _diagram._canvas;
    Rect vb = _viewportBounds;
    if (can == null) return vb;
    Point pos = _position;
    int[] approxWindowVals = { (int) pos.getX(), (int) pos.getY() };
    double sc = _scale;
    vb._set(approxWindowVals[0], approxWindowVals[1], Math.max(can.getWidth(), 0) / sc, Math.max(can.getHeight(), 0) / sc);
    return vb;
}

我们来自LogCat的信息在这里

08-09 16:49:14.883: W/View(4083): requestLayout() improperly called by com.nwoods.go.Viewport{41dfcb08 V.ED.... ......I. 0,0-0,0} during layout: running second layout pass
08-09 16:49:14.893: W/View(4083): requestLayout() improperly called by com.nwoods.go.Viewport{41dfcb08 V.ED.... ......I. 0,0-0,0} during second layout pass: posting in next frame
08-09 16:49:14.923: W/View(4083): requestLayout() improperly called by com.nwoods.go.Viewport{41dfcb08 V.ED.... ......I. 0,0-0,0} during layout: running second layout pass
08-09 16:49:14.943: D/abc(4083): onDraw
08-09 16:49:14.943: W/View(4083): requestLayout() improperly called by com.nwoods.go.Viewport{41dfcb08 V.ED.... ......I. 0,0-0,0} during second layout pass: posting in next frame
08-09 16:49:14.973: W/View(4083): requestLayout() improperly called by com.nwoods.go.Viewport{41dfcb08 V.ED.... ......I. 0,0-0,0} during layout: running second layout pass
08-09 16:49:14.983: W/View(4083): requestLayout() improperly called by com.nwoods.go.Viewport{41dfcb08 V.ED.... ......I. 0,0-0,0} during second layout pass: posting in next frame
08-09 16:49:15.003: W/View(4083): requestLayout() improperly called by com.nwoods.go.Viewport{41dfcb08 V.ED.... ......I. 0,0-0,0} during layout: running second layout pass
08-09 16:49:15.033: A/libc(4083): Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1), thread 4083 (egressiontester)

我们的硬件配置如下:

+---------+------------+-----------------------+
| Tablet  | Android OS |     Reached Error     |
+---------+------------+-----------------------+
| Nexus 7 | 4.2.2      | NO                    |
| Nexus 7 | 4.3        | YES                   |
+---------+------------+-----------------------+

如果你知道为什么会这样,请告诉我。我们可能不得不重新构建Canvas,但我们都很困惑,像Canvas这样常见的类在两个相同的平板电脑上表现不同。

非常感谢您的支持:)

2 个答案:

答案 0 :(得分:1)

如果更改的标志为false,则不在第二个布局传递上渲染,解决了这个问题。

答案 1 :(得分:0)

我们通过简单地将Canvas对象在使用后赋值为null来解决此问题。这可能导致Android API使用有效地址重新初始化。

问题已经解决,但地址问题在4.2.2而不是4.3上隐含解决的事实可能是一个错误,应该进一步研究。