Android 后台和前台工作的计时器

Android Timer which works on both background and foreground

我现在正在开发一款可以跟踪学生学习时间的应用程序。 学生可以按下开始按钮开始学习。 等他学完就停下来。

当屏幕打开或插入 phone 时,文本视图和进度条每秒更新一次。(我的意思是它工作正常) 但是当屏幕关闭时,更新 textview 和进度在 phone 休眠 10 秒后停止。 我认为可能是 activity 正在暂停。 是吗?

我测试使用:

  1. 部分唤醒锁
  2. 服务

这两种方式都会耗尽电池电量。 这个案子有什么想法吗? 谢谢

您应该使用服务 class,它将在 activity 被启动时在后台工作

enter link description here enter link description here

使用警报管理器 如果您的应用程序中有一项服务或 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);

Tutorial

Android documentation

正确使用Service。当屏幕关闭或设备被锁定时,方法 onPause 被调用。在这里你可以开始你的服务。

屏幕解锁后,该应用程序再次进入前台并触发 onResume,您可以从服务中检索数据并停止它。然后用数据更新视图。

当应用程序处于后台时,不要尝试从服务更新视图...它很可能会崩溃并且不是最佳的。等app再次出现在前面再更新吧

祝你好运!

终于找到答案了。 我在 onPause() 时读取了时间。 并停止更新视图。

在处理 onResume() 时。 我又看了一遍时间。 然后我通过添加 (onResumeTime-onPauseTime) 更新视图,然后继续更新。

所以,现在我不需要使用服务了。