0

我已经使用 android 编写了一个 VPN VPNService,它运行良好。当我运行它时,它会创建一个前台服务并通过我的 VPN 服务器发送所有流量。它还具有内部重新连接机制,如果它因任何原因断开连接而不停止服务本身,则可以重新连接 VPN 服务器。

我喜欢让这个 VPN 服务一直工作。但我的问题是,这个 VPN 服务在完全随机的一段时间后偶尔会停止(有时只需要 10 分钟,但有时它会在停止前工作 2-3 天)。

由于停止时间是完全随机的,而且我在代码中找不到任何会造成这种情况的地方(我已经调试了好几个星期),我想也许 android OS 本身会VPNService因为某种原因停止我的工作。我想知道是否有办法检测系统是否从外部停止了我的服务。任何想法?

4

1 回答 1

0

不幸的是,Android OS 仍然可以在内存不足和其他可能的情况下终止服务,即使它是后台运行的服务!

它不仅是 Android,而且所有移动操作系统都通过杀死后台应用程序来优化 RAM 使用。

这样做是为了让前台应用程序获得最高优先级。它确保当前应用程序的平稳运行并减少系统负载。

这篇文章中提到了两种方法: Background Service getting Killed in android

  • 如果您正在实施该服务,请覆盖 onStartCommand() 并返回 START_STICKY 作为结果。它会告诉系统,即使由于内存不足而想终止您的服务,它也应该在内存恢复正常后立即重新创建它。
  • 如果您不确定第一种方法是否有效 - 您必须使用 AlarmManager http://developer.android.com/reference/android/app/AlarmManager.html 。那是一个系统服务,它会在您告知时执行操作,例如定期执行。这将确保如果您的服务将被终止,甚至整个进程都会终止(例如强制关闭) - 它将由 AlarmManager 100% 重新启动。

我以前遇到过这个问题,我已经通过创建永远运行的服务来解决它,即使它被手动杀死或从它自己重新创建的系统中被杀死。

于 2019-12-04T08:41:31.997 回答