我有一个跟踪应用程序,需要每5秒向web服务器发送一次位置更新。只要应用程序处于唤醒状态/可见状态,此操作就可以正常工作。
如果设备被锁定,应用程序将在15分钟后进入睡眠状态(一两秒钟)。
将该应用程序添加到电池应用程序电源监视器下的"未监控的应用程序"中也不会阻止它进入睡眠状态。
我试过创建一个唤醒锁()
pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "TrackerTag");
wakeLock.acquire();
但即便如此也无济于事。该应用程序仍处于睡眠状态并停止发送更新。我不需要一直打开屏幕(因此使用PARTIAL_WAKE_LOCK),但我确实需要应用程序保持清醒,这样它才能将GPS坐标输入服务器数据库。
我已经将该应用程序添加到电池优化列表的忽略列表中,所以它并没有杀死它,上面的唤醒锁似乎什么都没做。
我还尝试将该服务创建为前台服务,即Android-为服务实现startForeground?而且这也不能使应用程序在15分钟后进入睡眠状态。
我需要做什么才能告诉android"不管怎样都不要管这个应用程序,除非我特别关闭并杀死它,否则不要停止它"?
在尝试了所有可能的方法来阻止android杀死我的应用程序后,最终的"修复"是每3分钟重新启动一次主活动。因为该应用程序从未运行过15分钟,这似乎阻止了安卓杀死它。
这是我使用的可运行程序。将其放在创建的主要活动中
h.postDelayed(new Runnable() {
public void run() {
runnable = this;
recreate();
h.postDelayed(runnable, 3*60*1000);
}
}, 3*60*1000);
这也会在活动暂停/隐藏时重新启动活动。如果应用程序可见,则在活动重新启动时会快速闪烁,但这对我来说不是问题。
除非有人能给我一个真正的官方解决方案,否则以上内容目前就可以了。我的应用程序在锁定时已经运行和更新web服务器一个多小时了。不幸的是,它永远不会超过15分钟。