こんにちは私はキャンバスでより速く描画するためにSurfaceViewとスレッドを使用しようとしています。これまでは、Viewクラスを拡張してonDrawメソッドを描画するだけで、キャンバス上に描画することができました。また、ユーザーがキーボードから入力した場合(アクティビティからカスタムビューにキーコードを渡すことによって)、キャンバスを再描画することもできます。別のスレッドでキャンバスに描画Android
問題は、私はマルチスレッドに固執しています。私はSurfaceViewでViewクラスを置き換えてRunnableを実装しました(thisチュートリアルに従います)。しかし、キー入力が発生した場合、私はキーコードを渡すことができません。また、カスタムビューでinvalidate()メソッドを呼び出すと、何も起こりません。図面の後にスレッドの実行を停止するために
retry = false;
:チュートリアル・コードと鉱山からの唯一の違いは、私はwhileループの終わりに次の行を追加したことです。そして、この行のすべてのクリックの後に追加されたので、すべてをもう一度書き直すことができます。
view.resume();
問題:
iは)(thread.join呼び出すことにより、スレッドを停止する場合は(理由はわからない) -viewがキーイベントに無効になることはありませんし、新しい画像を描画しません。メソッドを使用すると、CustomView内の他のオブジェクトはヒープメモリに残りますか、または破棄されますか?
このアプリを起動時に自動的に実行し、その後はクリック時にのみ実行する方法を教えてください。
view.resume()の前に明示的に呼び出すと、invalidateメソッドがキャンバスをクリアしないのはなぜですか?
p.s.私はコードサンプルを投稿する必要があります、私に知らせてくださいと私はテストアプリケーションとgitのrepoを添付します。
おかげアンドロイドで
私はvolatileキーワードを追加しましたが、何も変更されていません。おかげで – hogar
あなたの完全なコードを投稿します –