Android 后台和前台工作的计时器
Android Timer which works on both background and foreground
我现在正在开发一款可以跟踪学生学习时间的应用程序。
学生可以按下开始按钮开始学习。
等他学完就停下来。
当屏幕打开或插入 phone 时,文本视图和进度条每秒更新一次。(我的意思是它工作正常)
但是当屏幕关闭时,更新 textview 和进度在 phone 休眠 10 秒后停止。
我认为可能是 activity 正在暂停。
是吗?
我测试使用:
- 部分唤醒锁
- 服务
这两种方式都会耗尽电池电量。
这个案子有什么想法吗?
谢谢
您应该使用服务 class,它将在 activity 被启动时在后台工作
使用警报管理器
如果您的应用程序中有一项服务或 activity 应执行重复性任务,则您无法回复 TimerTask 或类似方法并从 Android 组件控制它。 Android 系统可以随时终止活动和服务以释放资源。
AlarmManager mgr=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent i=new Intent(context, OnAlarmReceiver.class);
PendingIntent pi=PendingIntent.getBroadcast(context, 0, i, 0);
mgr.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(), PERIOD, pi);
正确使用Service
。当屏幕关闭或设备被锁定时,方法 onPause
被调用。在这里你可以开始你的服务。
屏幕解锁后,该应用程序再次进入前台并触发 onResume
,您可以从服务中检索数据并停止它。然后用数据更新视图。
当应用程序处于后台时,不要尝试从服务更新视图...它很可能会崩溃并且不是最佳的。等app再次出现在前面再更新吧
祝你好运!
终于找到答案了。
我在 onPause() 时读取了时间。
并停止更新视图。
在处理 onResume() 时。
我又看了一遍时间。
然后我通过添加 (onResumeTime-onPauseTime) 更新视图,然后继续更新。
所以,现在我不需要使用服务了。
我现在正在开发一款可以跟踪学生学习时间的应用程序。 学生可以按下开始按钮开始学习。 等他学完就停下来。
当屏幕打开或插入 phone 时,文本视图和进度条每秒更新一次。(我的意思是它工作正常) 但是当屏幕关闭时,更新 textview 和进度在 phone 休眠 10 秒后停止。 我认为可能是 activity 正在暂停。 是吗?
我测试使用:
- 部分唤醒锁
- 服务
这两种方式都会耗尽电池电量。 这个案子有什么想法吗? 谢谢
您应该使用服务 class,它将在 activity 被启动时在后台工作
使用警报管理器 如果您的应用程序中有一项服务或 activity 应执行重复性任务,则您无法回复 TimerTask 或类似方法并从 Android 组件控制它。 Android 系统可以随时终止活动和服务以释放资源。
AlarmManager mgr=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent i=new Intent(context, OnAlarmReceiver.class);
PendingIntent pi=PendingIntent.getBroadcast(context, 0, i, 0);
mgr.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(), PERIOD, pi);
正确使用Service
。当屏幕关闭或设备被锁定时,方法 onPause
被调用。在这里你可以开始你的服务。
屏幕解锁后,该应用程序再次进入前台并触发 onResume
,您可以从服务中检索数据并停止它。然后用数据更新视图。
当应用程序处于后台时,不要尝试从服务更新视图...它很可能会崩溃并且不是最佳的。等app再次出现在前面再更新吧
祝你好运!
终于找到答案了。 我在 onPause() 时读取了时间。 并停止更新视图。
在处理 onResume() 时。 我又看了一遍时间。 然后我通过添加 (onResumeTime-onPauseTime) 更新视图,然后继续更新。
所以,现在我不需要使用服务了。