应用程序转到后台时需要实现超时功能

时间:2012-11-05 10:32:17

标签: android android-lifecycle

当我的应用程序进入后台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 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

最简单的方法是使用预定义类型的sendEmptyMessageDelayed,并在应用程序重新登录后使用removeMessages()调用。

答案 2 :(得分: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(),您可以使用广播意图,也可以让它启动您的某项活动。取决于闹钟响起时您想要做什么。

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

确保在您的应用恢复时(onResume())和完成时(onDestroy()内)取消闹钟

答案 3 :(得分:0)

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