首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于android服务-活动数据收发和ServiceConnection

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

Stack Overflow用户
提问于 2013-11-30 04:02:47
回答 2查看 117关注 0票数 0

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

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

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

提前谢谢。如果需要的话,我可以添加更多的信息。

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

它习惯于

  1. 启动一些LongRunningAsyncTasks(在服务停止之前,所有这些都被暂停和引用为无效),
  2. 更新应用程序Notification
  3. 去找getFilesDir()
  4. 为了保持枚举值(它的引用不保存在其他地方,它只是用于比较),以便从任何地方访问(不值得使用SharedPreferences)。
  5. 来点祝酒词
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-10 12:33:29

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

如果您不需要任何来自服务的反馈,那么就不要使用连接,只需在服务的startService()方法中执行几个命令就可以了。

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

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

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

票数 1
EN

Stack Overflow用户

发布于 2013-12-10 13:17:50

从您所说的看来,您可能根本不需要服务。看来您在LocalService中没有做任何长期的任务。如果是这样的话,您还可以使用AsyncTask或处理程序并完成。使用服务(本地或其他)的动机是在服务中执行一些长期存在的任务,而不是拖住主UI线程。如果您的任务不会占用太多时间,那么您就不需要服务了。

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

所以,首先分析一下你是否真的需要服务。如果您的任务可以快速执行,那么甚至不要麻烦地拥有一个服务。

希望这能有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20296352

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档