巨大なビットマップ ファイルを編集する必要があるため、デバイスのすべてのコアを使用して処理を高速化したいと考えています。私はそれが良い解決策になると思った:
- 利用可能なコアの数を数えます
- 画像を [numberofcores] パーツに分割します
- コアごとに新しいスレッドを作成し、このスレッドにイメージの一部を処理させます
画像を保存したり、ビットマップが完全に処理されたというメッセージを返すなど、他のタスクを続行する前に、すべてのスレッドが完了していることを確認するにはどうすればよいですか?
巨大なビットマップ ファイルを編集する必要があるため、デバイスのすべてのコアを使用して処理を高速化したいと考えています。私はそれが良い解決策になると思った:
画像を保存したり、ビットマップが完全に処理されたというメッセージを返すなど、他のタスクを続行する前に、すべてのスレッドが完了していることを確認するにはどうすればよいですか?
Handler.Callback特定の画像を処理するスレッドを追跡する配列を使用してクラスを拡張します (特定のスレッドThreadのどの部分が処理されているかを指定できるように、拡張する必要がある場合もあります)、作成したオブジェクトへBitmapの各スレッド処理の最後拡張クラス インスタンスを使用します。sendMessageHandler
拡張クラスでオーバーライドhandleMessageし、特定のスレッドの結果を受け取るには、特定のスレッドの結果を格納する処理配列からスレッドを削除します。処理配列サイズが0の場合、結果をまとめる。
すべてのワーカー スレッドを開始したら、各ワーカー スレッドに参加します。
AsyncTask他のすべてのスレッドが完了するのを待つ別のスレッドを作成する必要があると思うので、doInBackground()待機の方法でAsyncTask次のことができます。
while( task1.getStatus()!=AsyncTask.Status.FINISHED
|| task1.getStatus()!= AsyncTask.Status.FINISHED){
Thread.sleep(500);
}
そして、onPostExecute()「待機中のタスク」の方法で、他のタスクを続行できます。