9

同僚と私は、Android Canvasオブジェクトで非常に奇妙な動作を経験しています。

初期化されたキャンバス オブジェクトを扱っており、2 台の Nexus 7 タブレット間で Fatal Signal 11 エラーが選択的に発生しています。1 つは 4.2.2 を実行して問題なく動作し、もう 1 つは 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() が com.nwoods.go.Viewport{41dfcb08 V.ED によって不適切に呼び出されました.... ......I. レイアウト中の 0,0-0,0}: 2 番目のレイアウト パスの実行
08-09 16:49:14.893: W/View(4083): requestLayout() が com.nwoods.go.Viewport{41dfcb08 V.ED によって不適切に呼び出されました.... ......I. 2 番目のレイアウト パス中の 0,0-0,0}: 次のフレームに投稿
08-09 16:49:14.923: W/View(4083): requestLayout() が com.nwoods.go.Viewport{41dfcb08 V.ED によって不適切に呼び出されました.... ......I. レイアウト中の 0,0-0,0}: 2 番目のレイアウト パスの実行
08-09 16:49:14.943: D/abc(4083): onDraw
08-09 16:49:14.943: W/View(4083): requestLayout() が com.nwoods.go.Viewport{41dfcb08 V.ED によって不適切に呼び出されました.... ......I. 2 番目のレイアウト パス中の 0,0-0,0}: 次のフレームに投稿
08-09 16:49:14.973: W/View(4083): requestLayout() が com.nwoods.go.Viewport{41dfcb08 V.ED によって不適切に呼び出されました.... ......I. レイアウト中の 0,0-0,0}: 2 番目のレイアウト パスの実行
08-09 16:49:14.983: W/View(4083): requestLayout() が com.nwoods.go.Viewport{41dfcb08 V.ED によって不適切に呼び出されました.... ......I. 2 番目のレイアウト パス中の 0,0-0,0}: 次のフレームに投稿
08-09 16:49:15.003: W/View(4083): requestLayout() が com.nwoods.go.Viewport{41dfcb08 V.ED によって不適切に呼び出されました.... ......I. レイアウト中の 0,0-0,0}: 2 番目のレイアウト パスの実行
08-09 16:49:15.033: A/libc(4083): 0x00000000 で致命的なシグナル 11 (SIGSEGV) (コード = 1)、スレッド 4083 (egressiontester)

ハードウェア構成は次のとおりです。

+---------+------------+-----------------------+
| | タブレット | アンドロイド OS | エラーに達しました |
+---------+------------+-----------------------+
| | ネクサス7 | 4.2.2 | いいえ                    |
| | ネクサス7 | 4.3 | はい |
+---------+------------+-----------------------+

なぜこれが起こっているのかについて何か考えがある場合は、私に知らせてください。Canvas を再構築する必要があるかもしれませんが、Canvas と同じくらい一般的なクラスが 2 つの同一のタブレットで異なる動作をすることに、2 人ともかなり混乱しています。

ご支援ありがとうございました :)

4

2 に答える 2

1

変更されたフラグがfalseの場合、2番目のレイアウトパスでレンダリングしないと、この問題が解決しました。

于 2013-09-09T22:03:01.230 に答える