0

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

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

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

有任何想法吗?

4

2 回答 2

1

您可以考虑几种选择来满足您的要求,每种选择都取决于您的具体情况和您真正想要实现的目标。服务、IntentService(服务子类)、AlarmManager 或(部分)WakeLock(也许还有一些我缺少的更有创意的解决方案)。

我认为最简单的事情是使用 Partial 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();
于 2013-09-23T17:38:24.990 回答
0

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

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

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

于 2013-09-23T16:42:40.387 回答