3

当我的应用程序进入后台 5 分钟时,我需要创建一个超时功能(任何触发 onPause() 的东西,除非活动完成时)。如果用户返回应用程序,则应取消计时器。

另外,我需要计时器不依赖于手机中设置的时间,这意味着当应用程序进入后台然后用户更改应用程序仍将在 5 分钟内超时的时间。

查看 AlarmManager 的文档,它指出以下内容:

Note: The Alarm Manager is intended for cases where you want to have your application code       
run at a specific time, even if your application is not currently running. For normal 
timing operations (ticks, timeouts, etc) it is easier and much more efficient to use 
Handler.
4

4 回答 4

0

或者,您可以尝试设置绑定服务- 即使用户切换最前面的应用程序,这些服务也可以在后台运行。您可以使用Handler与服务进行通信,就像使用线程一样。

最简单的方法是使用预定义类型的 sendEmptyMessageDelayed 并在您的应用程序回到顶部后使用对 removeMessages() 的调用。

于 2012-11-05T11:30:48.143 回答
0

你应该看看AlarmManager您可以使用PendingIntent轻松地将您的应用程序编程为在特定时间或每 5 分钟运行一次。您可以使用相同的 PendingIntent 取消它。

我不知道时间依赖性,但很容易测试。

于 2012-11-05T11:25:10.143 回答
0

使用onPause()设置闹钟AlarmManager,如下所示:

AlarmManager alarmManager = getSystemService(Context.ALARM_SERVICE);
// Alarm time is elapsed time since boot (including sleep) plus 5 minutes
long alarmTime = SystemClock.elapsedRealtime() + 5 * 60 * 1000;
alarmManager.set(AlarmManager.ELAPSED_REALTIME, alarmTime, pendingIntent);

为此,pendingIntent()您可以使用广播 Intent,也可以让它开始您的一项活动。取决于你想在闹钟响起时做什么。

注意:使用AlarmManager.ELAPSED_REALTIME确保用户对其日期/时间设置所做的更改不会对您的 5 分钟超时产生任何影响。

确保在您的应用程序恢复(in onResume())和完成时(in onDestroy())取消警报

于 2012-11-05T11:34:14.193 回答
0

我想知道最简单的解决方案是否不是仅在您的活动暂停时在 sharedPreferences 中设置一个值并在 onResume 上再次测试该值。为避免用户更改时钟破坏值,您可以使用 SystemClock.elapsedRealtime() 或 SystemClock.uptimeMillis()

于 2012-11-05T11:35:50.763 回答