Android 我应该在哪里停止服务?

Android 我应该在哪里停止服务?,android,android-service,Android,Android Service,我的应用程序中有一个广播接收器。 当我收到广播时,我会将内容传递给服务来解码 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

我的应用程序中有一个广播接收器。 当我收到广播时,我会将内容传递给服务来解码

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);
    }
  }
}
根据内容,我从该服务启动适当的活动

现在我有一些关于如何管理这项服务的问题

  • 我应该在哪里停止这项服务?我是否应该在启动活动后停止它,并在收到广播时再次启动它?或者我应该让它在应用程序处于活动状态时运行,并在应用程序退出时停止它

  • 绑定到此服务有什么好处?我可以从广播接收器绑定到服务吗


您似乎正在使用
服务
来解码并启动
活动
。相反,我建议您放弃服务部分,尝试从
BroadcastReceiver
类中解码和启动活动

对于简单的任务,不要参与服务。当不使用服务时,期望应用程序的行为会容易得多


若你们真的想使用这项服务,那个么我建议你们阅读一下。它也是一种在后台运行的服务,在单独的线程上执行其工作,并在结束时自动终止。

首先,如果解码部分不耗时(网络通信等),最好在
广播接收器中执行。如果你真的想使用服务

您可以在启动
活动
后立即停止服务(但不建议从服务启动活动,您可以使用
通知


您不能从
BroadCastReceiver
绑定到服务,因为
bindService()
是异步的,并且一旦返回
onReceive()
,则可以免费对
BroadCastReceiver
进行垃圾收集。

Thx,您是对的,我现在将代码放在了我的接收器中。当代码变得更复杂和更大时,我会考虑使用intentService。似乎正是我需要的。