无论活动是否处于活动状态,都要运行计时器

时间:2013-09-23 16:16:38

标签: android background timer notifications alarmmanager

我创造了一个计时器倒计时,当它达到3时,它开始振动越来越强,直到0时它完全振动。

我的问题是,如果用户关闭屏幕,则计时器变得不稳定,即不可预测地倒计时或根本不倒计时。在搜索了一段时间后,我发现解决方案可能是使用AlarmManager,但是对于这样一个简单的任务来说这似乎非常复杂。

计时器应与活动相关联,如果设置,则还应触发指示剩余时间的通知。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您可以考虑使用一些选项来做您所要求的事情,每个选项都取决于您的具体情况以及您真正想要实现的目标。服务,IntentService(服务子类),AlarmManager或(部分)WakeLock(可能还有一些我缺少的创造性解决方案)。

我认为最简单的事情就是使用Partial WakeLock。这很简单,如果你想让一个进程在你的活动中运行,即使屏幕关闭也很有用。你必须谨慎使用它,因为它会缩短电池寿命(这就是屏幕关闭时活动暂停的原因)。

使用WakeLock:

在清单中添加权限:

<uses-permission android:name="android.permission.WAKE_LOCK" />

在您的活动中,在需要时启动WakeLock

PowerManager mgr = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
WakeLock wakeLock = mgr.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "WakeLockTag");
wakeLock.acquire();

当您完成唤醒锁(即不再需要运行该过程)时,请将其释放:

wakeLock.release();

答案 1 :(得分:0)

很明显,如果在活动中实现计时器,计时器将会不稳定。它来自活动的生命周期。主要活动元素是GUI线程,它不是实现逻辑元素的最佳位置。

您应该使用警报管理器或实施自己的服务来管理将在后台正常运行的操作。你有问题,因为当你切换你的应用程序的屏幕暂停,直到你重新启动它你没有完全控制活动内的动作。

我是使用大脑编程的粉丝,所以我提出建议,而不是明确的代码。但我希望它会有所帮助。