【问题标题】:Keeping alive Intent Service after application is killed应用程序被杀死后保持活动意图服务
【发布时间】:2013-11-02 23:34:29
【问题描述】:

我的应用中有意向服务。该服务有一些工作要做 - 上传一些文件。它只在有事可做时运行。

当满足某些条件时,服务将不会上传,例如没有互联网连接。因此,它会在广播接收器上注册自己以接收有关 Internet 连接更改的消息。

问题是服务被应用杀死,即使它正在做某事,例如:

  1. 应用正在向服务发送意图
  2. 服务开始上传内容,一切正常
  3. X% 上传,应用被终止,服务被终止
  4. Internet 连接已更改 - 服务已唤醒。

如果服务在app被kill后被唤醒,为什么它会被app杀死?有什么方法可以防止应用被杀死时杀死服务?

我正在手动杀死应用程序。我知道 android 可以随时终止我的服务,我不想阻止它。我只想在用户关闭或杀死应用程序后运行此服务。

【问题讨论】:

  • “杀死”你的应用是什么意思?
  • @StefandeBruijn 很难说。我所做的是使用主屏幕显示正在运行的应用程序,然后移出我的应用程序。如果可能的话,我想让我的服务保持活力。我认为这是可能的,因为 android 在广播接收器上唤醒了我的服务。
  • 你找到这个问题的答案了吗@Ari
  • 您的意思是要阻止服务重新启动,还是希望服务在应用被终止后仍继续运行?

标签: android android-intent service intentservice


【解决方案1】:

“它只在有事可做时运行。”只是理论上:) - 也许这就是你想要实现的目标。

“问题是服务被应用杀死,即使它正在做某事,例如:” 当然,在某些情况下,用户操作会结束您的 Service 或 Intent 服务。 This 是一个失败的答案。

“有什么方法可以防止应用程序被杀死时杀死服务?” 只需要注意谷歌中的“家长控制”任务保护”关键字!

【讨论】:

    【解决方案2】:

    因为您使用了 intentService,这意味着一旦 activty 销毁,intentService 将销毁 所以你必须使用Service而不是intentService,这样你就可以在后台上传你的文件了。

    通过广播接收器在Service和Activity之间进行操作或者将Service绑定到Activity。

    编辑:

    服务可以从任何线程触发。

    IntentService 必须从主线程触发。

    【讨论】:

    • 意向服务对我来说比服务好,意向服务没问题
    • 但它在广播接收器事件中恢复活力
    • 尝试请求唤醒权限 PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); mWakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, "我的标签"); mWakeLock.acquire();
    • “因为您使用了一个 intentService,这意味着一旦 activty 销毁该 intentService 将销毁”--> 这是不正确的。 IntentService 在处理完所有请求后会自动停止。
    • @BinhTran 谁among of you说的是实话
    【解决方案3】:

    如果您不介意显示通知(例如,您可以显示带有上传进度的通知),那么您可以在 IntentService(或服务)中调用:

    startForeground(int id, Notification notification)

    这应该可以防止在您的应用程序被终止时终止您的服务。

    来自文档:“如果终止您的服务会对用户造成干扰,例如您的服务正在执行背景音乐播放,您可以设置此标志,这样用户会注意到他们的音乐是否停止播放。”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-27
      • 2015-08-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多