1

別のスレッドで実行されているゲームを開発しています。ここで、インターネットから画像をダウンロードする必要があります。そのためのクラスを作成しましたAsyncTaskが、ゲーム スレッドから適切に呼び出す方法がわかりません。実際、AsyncTask画像がダウンロードされるまで待つ必要がありますが、ブロックされています。を使用するrunOnUIThreadと、スレッドがブロックされず、さらに先に進みます。これは私にはまったく合いません。Looper.prepare()before runningも使用してみましAsyncTaskたが、これにもいくつか問題があります。Looper.myLooper().quit()動作していないようです。もう一度 を呼び出そうとすると、2 番目AsyncTaskを呼び出そうとしていることを示す例外が発生します。Looper.prepare()時間。どのように進めればよいですか?前もって感謝します。

4

2 に答える 2

1

ゲーム スレッドがメイン スレッドでない場合、つまり UI スレッドでない場合は、ゲーム スレッドからハンドラを呼び出します。このハンドラーから非同期タスクを呼び出します。

このようなものを呼び出すだけです。

hm.sendEmptyMessage(0);

Handler hm = new Handler(){


public void handleMessage(Message msg)
{
//call async task.
}

};

ありがとう。

于 2011-06-09T06:51:07.363 に答える
1

いずれにしてもバックグラウンド スレッドがブロックされる場合は、AsyncTask は必要なく、このスレッドで直接画像の読み込みを行うことができます。Handler後で UI スレッドに投稿するには、ルーパーを設定する必要があります。1 つのオプションは、UI スレッドで作成されたハンドラーを渡すことです。他のオプションは、バックグラウンドスレッドにコンテキストを渡して実行することです

Handler h = new Handler(context.getMainLooper());

画像の読み込み中に進行状況の更新が必要な場合は、AsyncTask を使用し、説明に従って作成されたハンドラーを使用できます。

于 2011-06-09T06:51:33.077 に答える