私は自分のSurfaceViewを実装しています。このオブジェクトには、さまざまなグラフィックオブジェクトをCanvasに描画する目的のThreadオブジェクトが含まれています。私のSurfaceViewのコンストラクタでは、描画するオブジェクトを設定し、Threadオブジェクト(現在)はキャンバスにのみ適切な位置に配置します。HandlerThreadはどのようにメッセージを処理しますか?
ユーザが特定のアクション(スレッドオブジェクトが実行されている)を実行した後、SurfaceViewのコンストラクタで作成されたオブジェクトの1つを変更する必要があります(オブジェクトはビットマップです)。これは、アプリケーションのGUIスレッドとスレッドオブジェクトを実行しているスレッドとの間の通信を意味します。私はHandlerThreadクラスの使用方法を詳しく述べたthisページを発見しました。しかし、私はこのクラスがどのようにメモリ一貫性のエラーがないことを保証するために働くかを確認する必要があります。
次は、明確にするために取り除か多い自分のクラスの擬似コードです:
public MyThread extends Thread {
boolean _run = true;
public void run(){
// Create HandlerThread object
// Create Looper object
// Create Handler object
while (_run){
// DRAW the Bitmap in this loop
}
}
public boolean handleMessage(Message message){
/*
ALTER the Bitmap here as required
*/
}
}
public MyThread extends Thread {
boolean _run = true;
public void run(){
// Create HandlerThread object
// Create Looper object
// Create Handler object
while (_run){
// DRAW the Bitmap in this loop
}
}
public boolean handleMessage(Message message){
/*
ALTER the Bitmap here as required
*/
}
}
私はhandleMessage()
方法がrun()
メソッドを実行する同じスレッドで実行されることを理解しています。しかし、handleMessage()
はビットマップを変更するので、run()
はビットマップを描画します。スレッドがrun()
メソッドに戻る前に、handleMessage()
が完全に完了することを確認できますか?