我的应用程序中有一个广播接收器。 当我收到广播时,我将内容传递给服务进行解码。
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);
}
}
}
根据内容,我从此服务开始适当的活动。
现在我对如何管理此服务有一些疑问。
我应该在哪里停止此服务?我应该在开始活动后停止它并在收到广播时再次启动它吗?或者我应该在应用程序处于活动状态时让它运行,并在退出应用程序时停止它。
绑定此服务有什么好处?我可以绑定广播接收者的服务吗?
答案 0 :(得分:1)
好像您正在使用Service
来解码和启动Activity
。相反,我建议您放弃服务部分,尝试适应解码并从BroadcastReceiver
类启动您的活动。
对于简单的任务,不要涉及服务。在不使用服务时,期望应用程序的行为会容易得多。
如果您真的想使用服务,我建议您阅读IntentService。它也是一种在后台运行的服务,它在一个单独的线程上工作,并在最后自动被杀死。
答案 1 :(得分:1)
首先,如果您的解码部分不耗时(网络通信......等),您最好在BroadcastReceiver
中执行此操作。如果你真的想使用服务..
您可以在启动Activity
后立即停止服务(不推荐从服务启动活动,但您可以使用Notification
)。
您无法绑定BroadCastReceiver
的服务,因为bindService()
是异步的,而onReceive()
表示返回BroadCastReceiver
后{{1}}是免费的被垃圾收集。