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

好像您Service只是用来解码和启动Activity. 相反,我建议您放弃服务部分并尝试适应解码和从BroadcastReceiver课堂上启动您的活动。

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

如果您真的想使用服务,那么我建议您阅读有关IntentService的内容。它也是一种在后台运行的服务,在单独的线程上完成其工作并在最后自动被终止。

于 2012-10-10T08:27:11.150 回答
1

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

您可以在启动服务后立即停止服务Activity(虽然不建议从服务启动 Activity,但您可以Notification改用)。

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

于 2012-10-10T08:46:28.850 回答