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。似乎正是我需要的。