Android:当我不使用 IPC 时,为什么要以虚拟容量使用服务?

标签 android service

在花了很多时间试图找出使用服务执行我的后台任务而不是简单的单例类到底有什么优势之后,我似乎找到的唯一具体答案是仅仅存在 已启动的服务将使系统不太可能终止我的进程。

如果是这种情况,那么除了启动和停止它以表明我不希望我的进程在特定时间被终止之外,还有什么理由实际使用服务的任何功能?与其处理绑定(bind)到服务等的麻烦,不如将简单的单例与“setPleaseDontKillMyProcessIfYouCanHelpIt(boolean)”方法结合使用,以适本地启动和停止虚拟服务?同样,我没有使用进程间通信,因此这里不考虑该功能。

我知道有用户问了类似的问题 here ,但他没有得到一个直接的答案,只是重申了一个事实,即启动的服务不鼓励系统杀死你的应用程序(并建议他“正确使用服务”而不是使用单例和虚拟服务,但没有任何消息至于为什么)。

提前感谢您的任何回答。这是我第一次使用 StackOverflow,所以如果我违反了任何礼仪规则,请告诉我。

最佳答案

我也在想办法解决这个问题。服务,您可能需要考虑几件事:

  • 允许您使用 Intents 进行松散耦合(您可以限制 Activity 和服务之间的整个通信过程 仅用于 Intent )
  • 可以处理由 BroadcastReceivers 转发的 intents (例如 TIMEZONE_CHANGED)
  • 允许您将操作移出主 线程,如果它们变得耗时
  • 让您了解 应用程序生命周期 - 服务在创建或创建时获取回调 停止

将服务视为没有 GUI 的 Activity 。它也是一个生命周期管理的对象,它可以访问你的单例。

关于Android:当我不使用 IPC 时,为什么要以虚拟容量使用服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11781347/

相关文章:

Android TableLayout 拉伸(stretch)单元格内容

android - GPS 在 Android 服务中进入休眠模式

android - 如何判断应用程序中的任何 Activity 是否处于前台?

android - 拥有管理多个服务的数据结构的最佳方式是什么?

android - 在不改变方向的情况下旋转 Android 显示器

java - 为什么这个 JSON Parsing 越来越高效了?

android - 对齐 VideoView 和 linearLayout 的问题

java - 二进制 XML 文件行 #10 : Error inflating class com. google.android.material.button.API 级别 19 的 MaterialButton

ubuntu - 在 Ubuntu 上通过 Ansible 将 Java Jar 作为服务运行

c++ - 我可以从 Windows 服务调用 system() 吗