キャンバスで行列計算を使用したアプリを使用したAndroid 4.3+をアプリケーションでクラッシュするAndroid 4.3+
-
21-12-2019 - |
質問
必要以上にこれを読んでもっと時間を過ごす前に:私はこの質問に答えます。私はこれをデバッグし、私が共有するべきだと思った一日を過ごしました。
私は、基本的にゴルフコースでのターンバイターンナビゲーションであるアプリケーションの開発者です。そのように、私は画像を北向させるために回転させる必要がある画像を持っています。これは明らかにいくつかの行列変換を必要とする。
Android 4.3がHTC Oneにプッシュされた後、私は誰かがそれを使用したいと思ったときはいつでもアプリが単に閉じるというほとんど不満を得ました。 「残念ながら止めました」
私の最初のデバッグセッションは何でも明確にしませんでした。スローされている例外はありませんでしたので、最初はステップスルーすることはありません。私のログで次のことを見つけました:
11-12 14:12:56.257:アサート/ libc(5206):0x00000000(CODE= 1)、スレッド5206(ndroid.appname)
本当にデバッグを始めることができ、私はすべてを巡回していた、疑わしい容疑者とたくさんのカフェインを識別していましたが、私はそれを書いた同僚の助けを借りて考えました。カルプリットであることが判明したコード。
解決
判明したときに、この行はすべての問題を引き起こしていました。 CANVAS.SetMatrix(NULL);
この行の目的は簡単でした。変換行列をID行列にリセットして、新しい変換を適用できるようにします。 ドキュメント、これは許可されています:
現在の行列を指定された行列に完全に置き換えます。 MatrixパラメータがNULLの場合、現在の行列はIDにリセットされます。
どうやらAndroidで作業している人々は4.3コードからNULLパラメータをチェックしましたが、ドキュメントまたはがまともな例外をスローしても更新する必要があると考えていませんでした。代わりに、この行はそれが起こったところへの手がかりのようにそれほどすべてを衝突させるだけで、なぜ。
私は興味があれば、バグレポートを提出しました。私はそれが同じ状況で誰かを助けることを願っています。