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