2012-05-13 11 views
0

自分でビューを実装します。ビューのonDrawメソッドが繰り返し呼び出されます。これにより、重大なパフォーマンス上の問題が発生します。コードはとても複雑なので、ここに貼り付けることはできません。誰でも私にいくつかの理由を教えてくれる?私は私の指でその眺めに触れていない。ViewのonDrawメソッドをAndroidで繰り返し呼び出す条件はありますか?

+0

コードを投稿すると、問題を解決する最善の方法です。 :) –

+0

約70,000行のコードを含むプロジェクトが他の人によって書かれました。だから私はコードを貼り付けていない。本当に申し訳ありません。次回は起こりません。 –

+0

私はdownvotesに同意します。質問は完全に合理的です - 基本的に問題の診断方法に関するアイデアを求めます。これは確かに巨大なコードダンプを投稿するよりはるかに優れています([Stack Overflowはそれをすべて読むつもりはありません]を参照)(http://meta.stackexchange.com/a/129787/156967))。 –

答えて

1

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

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

+0

Eclipseの検索機能を使用してinvalidate()メソッドまたはpostInvalidate()を検索する価値があるかもしれません。 – Kerry

+0

ケリーとテッド、本当にあなたの親切な助けに感謝します。そして私は問題が間違った場所で 'invalidate()'によって引き起こされていることを知ります。問題が解決しました! –

0

私は今日同じ問題を抱えていました。私は私のビューのサブクラスでinvalidate()をオーバーライドすることで、それを解決:

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

は、その後、私はinvalidate()内のブレークポイントを設定し、それを打つのを待ちました。それが起こったとき、私は呼び出しのスタックトレースと呼び出し側呼び出し側を持っていました。ミステリーは2分で解決しました。

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

関連する問題