关于android服务活动数据收发和ServiceConnection



有几种方法可以连接到"服务到活动"。我只对本地服务感兴趣,我的LocalService会一直站在那里,直到用户停止它(这也意味着应用程序的结束)。我可能知道事情不对,如果是的话,请纠正我。

在参考页面上,指出为了直接使用本地服务的方法,我们应该使用ServiceConnection。绑定后,我们可以有一个对LocalService类的引用,并且我们可以直接使用这个LocalService的方法。AFAIK我们使用此引用调用的方法在具有相关"活动"的主线程上运行。

让我困惑的是,如果我使用骨架结构并直接通过其静态引用(即通过LocalService.getInstance())访问LocalService的方法,该怎么办。嗯,我已经用过了,没有遇到任何问题,但我仍然不确定哪一个更好,为什么。

提前谢谢。如果需要,我可能会添加其他信息。

编辑:在我前面提到的解决方案中,没有任何活动保留对LocalService的引用。

用于

  1. 启动一些CCD_ 8(在服务停止之前
  2. 更新应用程序CCD_ 9
  3. 得到CCD_ 10
  4. 保留一个枚举值(其引用没有保存在其他地方,它只是用于比较),以便从任何地方访问(不值得使用SharedPreferences)
  5. 敬酒

注意活动和服务的静态引用,因为它们可能是内存泄漏的原因。如果您不希望您的服务在主进程中运行,那么将其提取到另一个进程中并使用服务连接。

如果您不需要来自服务的任何反馈,那么就不要使用连接,只需将startService()与几个命令一起使用,这些命令将在服务的onStartCommand()方法中执行。

如果您需要来自服务的反馈,但不是经常需要,那么可以使用startService()和来自sendBroadcast()的服务的反馈或通过Handler类。

如果您经常需要反馈(例如媒体播放器的更新滑块),那么最好使用服务连接。

请记住,您的服务可以在不执行方法onDestroy()和不发出任何通知的情况下随时终止,这就是为什么保持静态引用不是一个好主意。

从您所说的内容来看,您可能根本不需要服务。看起来您没有在LocalService中执行任何长期任务。如果是这种情况,您还可以使用AsyncTask或Handlers,然后就可以完成了。使用服务(本地或其他)的动机是在其中执行一些长期任务,而不是暂停主UI线程。如果你的任务不会占用太多时间,那么你就不需要服务了。

默认情况下,服务确实在主线程上运行。除非是IntentService,它会自动为您创建一个工作线程,并且所有任务都在该工作线程中排队并一次处理一个。否则,您有责任为您的服务任务创建一个单独的线程。

所以,首先分析一下你是否真的需要服务。如果你的任务可以很快得到执行,那么甚至不用麻烦有服务。

希望能有所帮助。

最新更新