11

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

满足某些条件时,服务将不会上传,例如没有 Internet 连接。出于这个原因,它将自己注册到广播接收器以接收有关 Internet 连接更改的消息。

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

  1. 应用程序正在向服务发送意图
  2. 服务开始上传东西,一切都很好
  3. X% 上传,应用被杀,服务被杀
  4. Internet 连接已更改 - 服务已唤醒。

如果在应用被杀死后唤醒服务,为什么它会与应用一起被杀死?当应用程序被杀死时,有什么方法可以防止杀死服务?

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

4

3 回答 3

1

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

根据Service和Activity之间的操作,通过广播接收器或者将Service绑定到Activity。

编辑 :

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

IntentService 必须从主线程触发。

于 2013-10-24T10:11:16.093 回答
1

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

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

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

于 2013-10-24T10:13:38.890 回答
0

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

startForeground(int id, 通知通知)

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

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

于 2016-05-25T19:25:45.223 回答