これは、メイン/UI スレッドでメソッドを呼び出すことができるという問題ではなく、瞬時に呼び出すことができるという問題です。
UI レスポンシブ要件のため、通常、UI スレッドと直接対話することは許可されていません。その場合、メイン スレッドに対する要求をキューに入れるシステムを配置することは理にかなっています。ルーパー、ハンドラーなどを備えたそのシステムがあります。
これが私がやったことです:バックグラウンドスレッドでいくつかのタスクを実行し、条件が満たされるとすぐにメインスレッドを親密にしたい(リスナーを作成しました)、応答ハンドラーを使用して投稿します..何かこれ:
if(mNoOfPendingRequests >= mNoOfRequestsConsideredEnough){
mShouldFlagEnoughRequestsAtATime = true;
Log.i("ThumbnailDownloader: ","Enough Requests Queued");
//Now inform about this to PhotoGallery right now
mResponseHandler.postAtFrontOfQueue(new Runnable() {
public void run() {
mEnoughRequestsListener.onEnoughRequestsQueued(mShouldFlagEnoughRequestsAtATime);
}
});
}
else{
mShouldFlagEnoughRequestsAtATime = false;
mEnoughRequestsListener.onEnoughRequestsQueued(mShouldFlagEnoughRequestsAtATime);
}
すでに送信された十分なリクエストについて PhotoGallery に通知しないと、PhotoGallery はますます多くのリクエストを送信し続け、アプリは応答しなくなります。
また、リクエストはキューに入れられ、後で実行されるため、リクエストが多すぎます。
したがって、私の質問は次のとおりです。
バックグラウンド スレッドからほぼ瞬時に UI スレッドでメソッド/通知を呼び出す方法はありますか?