我应该在哪里停止服务?

时间:2012-10-10 08:24:41

标签: 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 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);
    }
  }
}

根据内容,我从此服务开始适当的活动。

现在我对如何管理此服务有一些疑问。

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

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

2 个答案:

答案 0 :(得分:1)

好像您正在使用Service来解码和启动Activity。相反,我建议您放弃服务部分,尝试适应解码并从BroadcastReceiver类启动您的活动。

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

如果您真的想使用服务,我建议您阅读IntentService。它也是一种在后台运行的服务,它在一个单独的线程上工作,并在最后自动被杀死。

答案 1 :(得分:1)

首先,如果您的解码部分不耗时(网络通信......等),您最好在BroadcastReceiver中执行此操作。如果你真的想使用服务..

您可以在启动Activity后立即停止服务(不推荐从服务启动活动,但您可以使用Notification)。

您无法绑定BroadCastReceiver的服务,因为bindService()是异步的,而onReceive()表示返回BroadCastReceiver后{{1}}是免费的被垃圾收集。