Wakelock并不总能让我的应用程序保持活力

时间:2014-10-21 10:55:21

标签: java android performance power-management wakelock

我制作了一个简单的Android GPS跟踪服务应用,以被动模式记录设备位置。为了保持CPU运行,我使用唤醒锁,但它不可靠。有时应用运行3个小时。有时它可以完整的24小时循环。我没有在屏幕上看到任何崩溃报告 - 应用程序停止没有任何指示。电池寿命很好。

我将唤醒锁声明为主要的活动类变量

static WakeLock wakeLock;

在开始GPS服务之前设置唤醒锁一次

PowerManager pm = (PowerManager) getApplicationContext().getSystemService(Context.POWER_SERVICE);
wakeLock = pm.newWakeLock((PowerManager.PARTIAL_WAKE_LOCK),"MyAppNameWakelock");
wakeLock.setReferenceCounted(true);
wakeLock.acquire();

出于屏幕更改的原因,我还更新了BackButton函数以运行moveTaskToBack(true);而不是正常操作。这可能与它有关吗?

是否有任何机械相互作用可以杀死使用中的唤醒锁,例如连接电源线或USB线?

随后,是否有Android中的任何类型的日志,我可以检查以查看我的应用停止的原因?

1 个答案:

答案 0 :(得分:1)

理论上如果你的应用程序没有因任何其他原因而死亡并具有唤醒锁权限(请参阅此处:<uses-permission android:name="android.permission.WAKE_LOCK" />),它应该保持活跃。

唤醒锁是否被外部事件移除,它可能是内核相关的&amp;设备依赖。某些内核可能具有非常激进的电源管理功能,可能会决定杀死唤醒锁。您是否在更多设备上运行了应用程序?

但是我会调查另一个事件是否会杀死我的应用程序(例如增加内存使用量)。

另一个想法是重写&#34;敲定&#34;方法并在垃圾收集器无法访问唤醒锁时确定消息何时消失。