尽管很忙,我的后台服务会被长时间等待杀死并重新启动

时间:2013-12-20 18:43:42

标签: java android multithreading sqlite service

有许多线程都有类似的问题和建议需要修复。我已经尝试了所有,除了将服务放在前台之外,没有一个适用于我的情况,我不想这么做。

我无法对现有主题发表评论,因为我没有足够的声誉,我想提问,所以无法回答。这是提出问题并寻找专家意见和建议的唯一选择。

讨论了类似问题的现有主题,

Time taken for Android Service to restart after being forcibly killed

Background Service getting killed in android

Android: Scheduling restart of crashed service with HUGE delay?

我的问题:

我有一个服务,它在启动时启动(听取意图BOOT_COMPLETED) 我启动一个线程,通过套接字与其他服务进行交互,并在服务被终止时被中断(onDestroy)

在手机上使用无线网络,我的服务永远不会被机器人杀死,并且按预期工作。

如果我只切换到3G( At& T SIM ),我的服务大约会被杀死。在 1800秒(30分钟)之后,并计划在大约重新启动3600秒(1小时)。一直以来,服务启动的线程都在执行 SQLLite 调用并与其他服务进行交互。

Android认为我的服务已经空闲了1800多秒,并且会在很长的重启时间内终止它。

问题:

  1. 我需要做什么来告诉Android ActivityManager我的服务正在使用它旋转的线程工作,所以不应该被杀死。只发生在3G上。

  2. 如何将计时器减少到20秒以下。 1小时太长了。 我确实使用了AsyncTask来旋转其他线程,这个线程循环播放1秒,但我的服务仍然被杀死。

  3. 在确定要杀死哪项服务时使用3G与Wifi时Android行为如何变化?

1 个答案:

答案 0 :(得分:0)

我发现android不支持长时间运行的后台服务。因此,当网络带宽受到更多限制时,我的服务需要与其他服务保持通信,特别是在3G / 4G上会被杀死。

我切换回前台模式,现在工作正常。我还是想听听是否有办法避免3G / 4G的前台模式。