让Android应用程序始终保持清醒

时间:2017-11-13 02:46:38

标签: android wakelock

我有一个跟踪应用,需要每5秒向网络服务器发送一次位置更新。只要应用程序处于唤醒/可见状态,此功能就可以正常工作。

如果设备被锁定,应用程序将在15分钟后进入睡眠状态(给予或接受一两秒钟)。

将应用程序添加到Battery app power monitor下的“Unmonitored apps”并不会阻止它进入睡眠状态。

我试过创建一个唤醒锁,即

pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "TrackerTag");
wakeLock.acquire();

但即便如此也无济于事。该应用程序仍然进入睡眠状态并停止发送更新。我不需要保持屏幕(因此PARTIAL_WAKE_LOCK),但我确实需要应用程序保持清醒,以便它可以将GPS坐标提供给服务器数据库。

我已将应用程序添加到电池优化列表的忽略列表中,因此不会将其删除,上面的唤醒锁似乎什么都不做。

我也尝试将服务创建为前台服务,即Android - implementing startForeground for a service?,并且也不会保存应用程序在15分钟后进入睡眠状态。

我需要做些什么才能告诉安卓“无论什么都不管这个应用程序,不要阻止它,除非我特意关闭并杀死它”?

1 个答案:

答案 0 :(得分:0)

在尝试了所有可能的方法之后,我可以找到停止Android杀死我的应用程序结束"修复"是每3分钟重启一次主要活动。因为应用程序从未运行15分钟,这似乎会阻止Android杀死它。

这是我使用的可运行的。把它放在主要活动onCreate

h.postDelayed(new Runnable() {
    public void run() {
        runnable = this;
        recreate();
        h.postDelayed(runnable, 3*60*1000);
    }
}, 3*60*1000);

这也会在暂停/隐藏时重新启动活动。如果应用程序可见,则重新启动活动时会快速闪烁,但在我的情况下这不是问题。

除非有人能给我一个真正的官方解决方案,否则以上内容将会有所帮助。锁定后,我的应用程序一直在运行并更新Web服务器超过一个小时。 Perviosuly它永远不会超过15分钟。