【问题标题】:Keep a Service started at BOOT running even if Application stopped即使应用程序停止,也要在启动时保持服务启动
【发布时间】:2015-09-05 06:59:13
【问题描述】:

我正在开发一个应用程序,该应用程序在启动时启动一个活动,该活动使用服务(由 startService 启动)登录到我的服务器(需要通过 facebook 登录的活动)。该服务建立 XMPP 侦听器,之后什么也不做,只是等待连接。我希望该服务在设备启动时一直运行。

问题是活动在一段时间后停止,我的服务也停止了。该服务返回 START_STICKY 所以我期待它会挂起。此外,该服务除了等待连接之外什么也不做。

活动具有以下属性: android:excludeFromRecents="true" 机器人:noHistory =“真” android:launchMode="singleInstance"

这样它就不会出现在任务列表中(当用户长按主页按钮时)。

当用户长按主页按钮时,活动停止,服务也结束。我认为应用程序可能退出,这就是服务也结束的原因。我找不到任何方法来阻止活动停止。可能是因为上述属性而停止。

那么我可以做些什么来保持服务始终运行。如何防止应用程序被删除。我在某处读到,如果我在服务中运行一个 while 循环,那么 START_STICKY 可以保留服务吗? 我可以使用 AlarmManager 启动服务,但我不希望它轻易停止,然后每次都必须重新启动它。

我不想运行前台服务。我无法在不同的进程中运行该服务,因为我使用的是不执行 IPC 的现有代码。任何帮助将不胜感激。谢谢。

【问题讨论】:

    标签: android android-activity xmpp android-service android-applicationinfo


    【解决方案1】:

    有两件事可以让服务无限期地运行;使用 startService() 创建服务并从 onStartCommand() 返回 START_STICKY。你似乎都在这样做。通过这两个步骤,服务可能会被系统关闭,但它应该几乎立即重新启动。

    我唯一的建议是在服务中创建一个单独的线程。这是因为默认情况下,启动的服务在应用程序主线程中运行。如果服务一直在执行某些任务,它可能会阻塞主线程并杀死应用程序。谷歌文档有一个实现这个的例子:

    http://developer.android.com/guide/components/services.html#ExtendingService

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-13
      • 2012-05-27
      • 2018-12-20
      • 1970-01-01
      • 2021-10-31
      • 2013-07-19
      相关资源
      最近更新 更多