【问题标题】:Difference between START_STICKY and START_REDELIVER_INTENT?START_STICKY 和 START_REDELIVER_INTENT 之间的区别?
【发布时间】:2014-02-27 03:52:59
【问题描述】:

我正在为我的 android 应用程序创建一个服务,通过 Intents 向该服务提供数据。问题是当服务被系统破坏时,提供给它的意图数据无法恢复,导致我的应用程序崩溃。

我听说START_REDELIVER_INTENT 将在有足够的可用内存恢复提供给服务的意图数据时立即重新启动我的服务,而START_STICKY 不会恢复意图数据。

我说的对吗?还是有什么我不知道的?

此外,我的服务在被系统销毁后需要永远重启。

【问题讨论】:

  • 为什么它首先被您的系统停止?您的设备内存不足吗?

标签: android android-intent android-service


【解决方案1】:

START_STICKY- 它会告诉系统创建服务的最新副本,当可用内存足够时,它会保留状态并从低内存中恢复。在这个过程中,我们将丢失之前可能计算过的结果。

START_REDELIVER_INTENT-它将告诉系统在崩溃后重新启动并重新获得服务,并重新传递崩溃发生时存在的意图。

除此之外,我们还可以对START_NOT_STICKY做一点说明

START_NOT_STICKY-它会告诉系统不要担心重启服务,即使它有足够的可用内存。

请访问以获取更多信息

http://developer.android.com/reference/android/app/Service.html

【讨论】:

  • 会让服务foreground避免杀死服务(极端OOM除外!)?
  • 看你怎么用了,前台服务还是会被杀掉的请访问stackoverflow.com/questions/6619143/…
  • 我想如果你们中的一些人解释一下为什么将它命名为 STICK 而不是 STICKY,那就很清楚了?至少 REDELIVER_INTENT 是很直观的,但是另外两个呢?没那么多。为什么叫粘而不粘?
【解决方案2】:

如果您要覆盖 onstartCommand() 方法,则您有责任在不需要时通过调用 stopSelf() 或 stopService() 命令停止它。

【讨论】:

  • 真的,你不必阻止它。
  • @Clocker 你必须调用stopSelf()stopService() 来销毁服务,否则即使它没有运行它的实例也会在内存中存活。
  • 旧线程,但如果您的应用不再处于前台,@Jack Oreo 现在会为您调用 stopSelf()。
猜你喜欢
  • 1970-01-01
  • 2021-12-25
  • 2020-05-10
  • 2014-09-20
  • 2010-10-28
  • 2015-10-04
  • 2012-08-12
  • 2011-02-18
  • 2019-12-21
相关资源
最近更新 更多