应用程序在同一apk(进程中从服务接收实时数据)-是否不良做法?



我有一个收集数据的服务,并且必须在应用程序在后台运行时承受应用程序的生命周期更改。此服务与我的应用位于同一进程中,即也在清单中注册。

服务将 LiveData 发布到应用,主应用通过绑定到服务并执行以下操作来检索此 LiveData:

private void onServiceConnected(TicketValidatorService service) {
...
service.getStatus().observe(this, new Observer<SomeStatus>() {
@Override
public void onChanged(SomeStatus status) {
handleStatusChanged(status);
}
})
...
}

这算不算不好的做法?或者我应该通过Messenger/Handler或LocalBroadcastManager的东西在服务/应用程序边界上进行通信?将服务放在另一个进程中会很困难,但我认为我不必为了我的任务而这样做。

直接与本地服务通信并不被认为是一种不好的做法,实际上是一种官方建议。当您不打算使用它时,没有理由使您的代码复杂化以支持跨进程通信。此外,这种通信涉及封送处理/取消封送,这增加了对可以传递的数据类型的限制,并且对性能有一些影响。

另请注意,从 android 8 开始,后台服务有限制。因此,如果您不将服务作为前台服务运行,则在您的应用程序进入后台后,它不会长时间处于活动状态。