【问题标题】:How to set the priority of android service?如何设置android服务的优先级?
【发布时间】:2014-12-16 07:16:53
【问题描述】:

有没有办法设置android服务的优先级?我想在销毁 App 的主要活动后在后台运行该服务。所以我要从我的服务中返回“START_REDELIVERY_INTENT”。但是重新启动服务需要一些时间(大约 1-3 分钟)。我想立即重新启动服务。有没有办法设置android服务的优先级。

仅供参考,我正在使用 startService 创建服务并通过 intent.putExtra() 传递一个对象。

以下快照来自我的 android 设备的设置/应用程序/运行应用程序,这表明应用程序正在重新启动...我的应用程序是实时特定的,所以我想立即重新启动它...

【问题讨论】:

  • 你检查过this 吗?

标签: android android-activity android-service


【解决方案1】:

您无法控制Service 的这种行为,因为它取决于操作系统和可用资源。但是,对于持续运行的后台服务,我建议您返回START_STICKY - 一旦服务因任何原因被破坏,它会尽力重新运行。

【讨论】:

  • 但是我需要将一个对象传递给我的服务,并且传递先前传递的意图(在销毁主要活动期间)的唯一可能方法是“START_REDELIVER_INTENT”(据我所知)......有没有其他解决方案?
  • 其他方法是使用可序列化和写入对象状态,但我的对象属于“BluetoothDevice”类,我无法序列化...唯一的序列化方法是保存设备地址和设备重新启动时命名并搜索并匹配它......所以会有很多同步和时间限制问题......我正在寻找一些更简单的方法......如果你有?提前谢谢:)
  • BluetoothDevice 实现了 Parcelable,因此您可以将其数据编组为字节,并在重构后重新使用。但是,在处理 BluetoothDevice 时,您可以简单地保留地址和名称 - 正如您所说的那样。有时有一些简单的解决方案可以解决我们忽略的问题。
  • 是的,我做到了!!!我在我的服务中返回了“START_STICKY”,因此它正在立即重新启动(我实际上想要)......我使用文件处理将设备地址保存到文件中,并在重新启动服务时从文件中检索它......重新检查我检查的服务,如果意图为空...代码工作正常...为了从设备地址(字符串形式)制作 BluetoothDevice 对象,我使用了“device = myBluetoothAdapter.getRemoteDevice(device_address);”
【解决方案2】:

优先级取决于组件类型和用户正在使用的当前应用。最高优先级具有显示给用户的当前Activity 和所有foreground services。前台服务必须有一个不能关闭的通知。要创建前台服务,您必须从 Service 本身调用 startForeground(...) 方法,传递通知的 id 和 Notification 对象本身。如果您想稍后更新通知,可以使用 id。

我建议您创建service bound 并将您的活动绑定到服务。这样,您就可以在 onResumeonPause 方法中启动和停止服务。

【讨论】:

    【解决方案3】:

    在这种情况下提高服务优先级的唯一方法是将其设为foreground service

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多