1

アプリケーションにブロードキャスト レシーバーがあります。ブロードキャストを受信すると、コンテンツをサービスに渡してデコードします。

public class Receiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
    if (intent.getAction().equals("xxx.yyy.zzz")) {
        Log.d("Receiver", "Intent received from server!");

        byte[] data = intent.getByteArrayExtra("Data");
        String params = intent.getStringExtra("Params");

        Intent i = new Intent(context, DecodeService.class);
        i.putExtra("Data", data);
        i.putExtra("Params", params);

        context.startService(i);
    }
  }
}

内容に応じて、本サービスから適切な活動を開始します。

このサービスの管理方法についていくつか質問があります。

  • このサービスはどこで停止すればよいですか? アクティビティを開始したら停止し、ブロードキャストを受信したら再開する必要がありますか? または、アプリケーションがアクティブなときに実行し、アプリケーションが終了したら停止する必要があります。

  • このサービスにバインドする利点は何ですか? また、ブロードキャストレシーバーからサービスにバインドできますか?

4

2 に答える 2

1

まず第一に、デコード部分に時間がかからない場合(ネットワーク通信など)は、で行う方がよいでしょうBroadcastReceiver。本当にサービスを利用したい場合。

サービスを開始するとすぐにサービスを停止できますActivity(ただし、サービスからアクティビティを開始することはお勧めしませんが、Notification代わりに使用できます)。

は非同期でBroadCastReceiverあるため、からサービスにバインドすることはできません。ドキュメントには、一度返されるとガベージコレクションが自由にできると記載されています。bindService()onReceive()BroadCastReceiver

于 2012-10-10T08:46:28.850 に答える
1

Serviceをデコードして開始するためだけに使用しているようですActivityBroadcastReceiver代わりに、サービス部分を捨てて、クラスからのアクティビティのデコードと起動に対応することをお勧めします。

単純なタスクについては、サービスに関与しないでください。サービスを使用していないときのアプリケーションの動作を期待しやすくなります。

本当にサービスを使いたい場合は、IntentServiceについて読むことをお勧めします。また、バックグラウンドで実行され、別のスレッドでジョブを実行し、最後に自動的に強制終了されるタイプのサービスでもあります。

于 2012-10-10T08:27:11.150 に答える