如何确定Android OS是否已停止服务

问题描述 投票:0回答:1

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

我希望此VPN服务始终保持工作状态。但是我的问题是,此VPN服务有时会在完全随机的一段时间后停止(有时只需要10分钟,而有时它会在停止前2-3天工作)。

由于停止时间是完全随机的,并且我无法在代码中找到任何可导致这种情况的位置(我已经调试了几周),所以我认为也许是因为某些原因,Android OS本身停止了VPNService。我想知道是否有一种方法可以检测系统是否从外部停止了我的服务。有想法吗?

android android-service android-vpn-service
1个回答
0
投票

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

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

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

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

  • [如果要实现服务,请覆盖onStartCommand()和返回START_STICKY作为结果。它会告诉系统,即使如果由于内存不足而要终止您的服务,则应该内存恢复正常后,请重新创建它。
  • 如果不确定第一种方法是否行得通,则必须使用报警管理器http://developer.android.com/reference/android/app/AlarmManager.html。这是一项系统服务,将在您执行以下操作时执行操作例如定期告诉。这样可以确保您的服务将终止,甚至整个过程都将消失(例如强制关闭)-AlarmManager将100%重新启动。

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

© www.soinside.com 2019 - 2024. All rights reserved.