1

BroadcastReceiverマニフェストで定義されているいくつかの を に移行していLocalBroadcastManagerます。

これらBroadcastReceiverの s は、他のアプリから呼び出す必要はありません。これらは、UI アクションに応答してsendBroadcast()から呼び出されるか、ActivityHTTP 要求を実行して で応答を配信するユーティリティ クラスから呼び出されますIntent

最近知ったLocalBroadcastManagerばかりで、コードを最適化したいと考えています。私はベンチマークを作成していません (方法もわかりません)。やる価値はありますか、それとも時期尚早の最適化ですか? s はユーザーのBroadcastReceiverアクションに応じて呼び出されるため、移行する価値がない場合があります。

登録はどこregisterReceiverで行えばよいですか?Application正しい場所ですか?

4

1 に答える 1

1

registerReceiver の登録はどこで行う必要がありますか?

それらは、その作業を担当するコンポーネントによって登録される必要があります。

主に、LocalBroadcastManagerコンポーネント間の通信に使用されます。典型的な例は、IntentServiceローカルブロードキャストを送信してIntent、関心のあるアクティビティに何かが変更されたことを知らせることです...そのようなアクティビティがフォアグラウンドにある場合に限ります。そのシナリオでは、アクティビティは で受信者をonResume()登録し、 でその受信者を登録解除しonPause()ます。

それでは、簡単に説明した 2 つの「ユース ケース」を見てみましょう。

UI アクションに応答するアクティビティから

を削除しsendBroadcast()ます。を削除しBroadcastReceiverます。ここで作業を行うか、 を fork して作業を行うか、 を介して do にAsyncTaskコマンドを送信します。IntentServicestartService()

HTTP リクエストを実行し、インテントでレスポンスを配信するユーティリティ クラスから。

この「ユーティリティ クラス」が ( を介してAsyncTask)アクティビティによって使用されているか、どちらも使用されてIntentServiceいません。

ユーティリティ クラスがAsyncTaskアクティビティの によって使用されている場合は、 をダンプしsendBroadcast()、 をダンプして、 and/or アクティビティBroadcastReceiverで単純に作業を行います。AsyncTask

ユーティリティ クラスが によって使用されていてIntentService、その作業に基づいて UI を更新しようとしている場合、それが私の回答の 2 番目の段落で概説したパターンです。

于 2012-06-09T14:44:20.413 に答える