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

标签 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?

我的问题:

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

在手机上使用 Wifi,我的服务从未被 android 杀死,并且按预期工作。

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

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

问题:

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

  2. 如何将计时器缩短到 20 秒以下。 1小时太长了。 我确实使用 AsyncTask 旋转其他线程,该线程循环永远 hibernate 1 秒,但我的服务仍然被终止。

  3. Android 行为在使用 3G 和 Wifi 时有何变化来确定要终止哪个服务?

最佳答案

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

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

关于java - 尽管很忙,但我的后台服务被杀死并等待了很长时间才重新启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20710062/

相关文章:

java - 如何在 Java Swing 中创建圆角 BevelBorder?

java - 在 Eclipse 外部运行主 Java 应用程序

Java,有没有办法使用servlet输出流 append 字节数组而不是覆盖?

java - 在java中处理HTTP请求重定向

android - AlarmManager 未在指定时间触发警报

multithreading - 在共享对象的各个部分上进行独立操作时,是否需要互斥锁?

c# - .Net:后台 worker 和多 CPU

java - 导致故障转储的 Java 错误的解决方法

java - 如何制作资源加载器?

java - Android - 指纹扫描仪在 5 次尝试后停止工作?