0

これが私が物事を行うことを計画している方法です:

私は私Activityが登録する私のものを持っていますBroadcastReceiver

private LocalBroadcastManager localBroadcastManager;
private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
        //handle received data
        }
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    ....
    LocalBroadcastManager = LocalBroadcastManager.getInstance(context);
    IntentFilter intentFilter = new IntentFilter();
    intentFilter.addAction(ACTIVITY);
    localBroadcastManager.registerReceiver(broadcastReceiver, intentFilter);
}

IntentServiceWeb からデータを取得して処理する があります。データのダウンロード中および処理の完了時に、サービスは、ブロードキャスト メッセージを送信することによって、実行中のアクティビティをアクティビティに通知します。データのサイズによっては、データのダウンロードと処理に時間がかかる場合があります。たとえば、最大 20 分かかる場合があります。

   localBroadcastManager.sendBroadcast(new Intent(ACTIVITY).putExtra(ACTION, value));

IntentServiceサービス内に受信者を登録することにより、アクティビティが にメッセージを送信するための同様のアプローチが使用されonStartCommandます。

これはテスト済みで、正常に動作します。BroadcastManagerグローバルとLocalBroadcastManagerについて読んだことがありますが、このアプローチのセキュリティに関連する懸念があります。私のニーズは、主にパーセル可能なオブジェクトを使用して、両方の方法でサービスとアクティビティ間の通信に厳密に関連していることを覚えておいてください。

私の質問は次のとおりです。

  1. を使用してサービスからアクティビティにデータを送信すると、どのようなセキュリティ上の問題が発生する可能性がありLocalBroadcastManagerますか? データが別のアプリに漏洩する可能性がある状況はありますか? LocalBroadcast は本当にローカルですか? 処理されたデータは非公開であり、それが私が懸念している理由です。

  2. サービスとアクティビティの間の通信に最適な方法はありますか?

4

2 に答える 2

3

LocalBroadcastManager を使用してサービスからアクティビティにデータを送信すると、どのようなセキュリティ上の問題が発生する可能性がありますか? データが別のアプリに漏洩する可能性がある状況はありますか? LocalBroadcast は本当にローカルですか? 処理されたデータは非公開であり、それが私が懸念している理由です。

ブロードキャストはアプリのプロセスに限定されます。心配はありません。

サービスとアクティビティの間の通信に最適な方法はありますか?

もう 1 つの方法は、サービスの入札とデリゲートの登録です。私はむしろに固執したいLocalbroadcastManager

于 2016-09-12T12:01:01.300 に答える