0

自分でビューを実装すると、ビューの onDraw メソッドが繰り返し呼び出されます。これにより、重大なパフォーマンスの問題が発生します。コードが複雑すぎてここに貼り付けられません。誰でも考えられる理由を教えてもらえますか?指でビューに触れていません。

4

2 に答える 2

1

理由の 1 つは、onDrawメソッドが (おそらく間接的に) ビューを無効にするメソッドを呼び出していることです。もう 1 つの可能性は、プログラムとはまったく関係のない何かが再描画を引き起こしていることです。この実験を試してみてください: 描画コードをコメントアウトし、単純な線画などの非常に単純なものに置き換えて、それが機能していることを示してください。繰り返される描画がなくなる場合、それはコード内の何かonDrawです。問題が再発するまで、現在のコードの復元を少しずつ開始してください。その後、問題を突き止めることができます。

実験を試みても問題が解決しない場合は、ビューを無効にしている何か (おそらくワーカー スレッド) をコード内の別の場所で探してください。

于 2012-05-13T08:40:25.163 に答える
0

今日も同じ問題がありました。invalidate()View サブクラスでオーバーライドすることで解決しました。

@Override
void invalidate() {
    super.invalidate();
}

次に、内部にブレークポイントを設定し、invalidate()ヒットするのを待ちました。それが行われたとき、私は呼び出しのスタックトレースと問題のある呼び出し元を持っていました. 謎は2分で解けました。

それでもうまくいかない場合は、View で他の無効化メソッドをオーバーライドしてみてください。

于 2012-05-15T19:51:47.383 に答える