【问题标题】:What is the impact of increasing startId in Android foreground service?Android前台服务增加startId有什么影响?
【发布时间】:2016-10-12 09:49:43
【问题描述】:

我在我的 android 应用程序中使用前台服务。我正在覆盖服务的方法 onStartCommand 如下:

public int onStartCommand(Intent intent, int flags, int startId) {
// doing my staff here
}

正如documentation所说:

每次客户端显式启动服务时由系统调用 通过调用 startService(Intent),提供它提供的参数 以及一个表示启动请求的唯一整数令牌。

还有

startId int:表示此特定请求的唯一整数 开始。与 stopSelfResult(int) 一起使用。

我正在正确使用服务,并且服务运行正常。

我的问题是:

每次我启动服务时,startId 都会像文档所说的那样增加。我不清楚的是 startId 增加的影响是什么?它会占用更多内存还是会影响应用程序性能? (例如,如果 startId 增加超过 1000 怎么办?)

【问题讨论】:

  • Service#stopSelfResult(int startId)中使用,只是一个ID而已
  • 您是否从您的应用程序中多次启动相同的服务?你为什么要这样做 ?解释一下你的情况,然后我可以回答
  • @AmirZiarati 有什么问题吗?如果没有它,您将如何将新请求传递给IntentService
  • @pskink 没有任何问题。我只是要确保你知道你在做什么。因为每次调用服务都将是一项工作,而这个 ID 是该工作的一个 ID。如果之前的任务仍在工作并且 ID 不是这种现象的标志,它可能会增加内存使用。

标签: android performance foreground-service


【解决方案1】:

这只是一个令牌,只是一个 ID,类似于 startActivityByResult 中的请求 ID。

如果您多次启动服务,您可以通过此令牌对每个服务进行处理。

假设您调用 start service 两次,然后想停止第二次调用!您将需要一些东西来引用那一秒,而这就是这个 ID。

增加这个 ID 不能表示内存泄漏或任何它只是一个 ID。但是,您需要在应用程序中多次启动服务的情况很少见。所以要小心你的所作所为。如果您真的不需要,请不要启动单个服务的多个实例。

【讨论】:

  • "Assume you call start service two times and then want to stop the second instance" 不是真的,服务不能有“第二个”实例,它是一个符号
猜你喜欢
  • 1970-01-01
  • 2015-08-17
  • 1970-01-01
  • 2011-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-13
相关资源
最近更新 更多