【问题标题】:Keep android app awake at all times始终保持 android 应用处于唤醒状态
【发布时间】:2018-04-25 16:01:18
【问题描述】:

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

如果设备被锁定,应用会在 15 分钟后进入睡眠状态(给或花一两秒)。

将应用添加到电池应用电源监视器下的“未受监控的应用”中也不会阻止它进入睡眠状态。

我尝试过创建唤醒锁,即

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 分钟后进入睡眠状态。

我需要做什么来告诉 android“无论如何不要理会这个应用程序,除非我特别关闭并杀死它,否则不要停止它”?

【问题讨论】:

    标签: android wakelock


    【解决方案1】:

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

    这是我使用的可运行文件。把它放在主Activity onCreate

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

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

    除非有人能给我一个真正的官方解决方案,否则上述方法暂时可以解决。我的应用程序在锁定时已经运行并更新了一个多小时的网络服务器。 Perviosuly 它永远不会超过 15 分钟。

    【讨论】:

    • 你有没有改进过这个解决方案?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-26
    • 2022-07-27
    • 1970-01-01
    • 1970-01-01
    • 2011-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多