代码之家  ›  专栏  ›  技术社区  ›  user16655

Android中的计时器-即使手机或应用程序关闭,如何保持计数

  •  0
  • user16655  · 技术社区  · 9 年前

    我正在尝试实现一个计时器,它只计算按下启动按钮后经过的时间。即使应用程序/手机已关闭,我也需要保留此计数器。我如何实现这一点?在应用关闭时将当前时间存储在某个位置,然后在应用再次打开时检索此数据?如果这是一个很好的方法,我该如何实现这个解决方案?我希望有人能提供一些意见。

    我已经使用Handler实现了我的计时器/计数器(我在StackOverflow上的回答中看到了这个解决方案)

    3 回复  |  直到 9 年前
        1
  •  2
  •   Community kfsone    7 年前

    这样做的一种方法是保存系统 Time 当计数器开始,然后再次保存 时间 当它结束时。

    您可以将开始时间与结束时间进行比较,以了解经过了多少时间。

    它可能看起来像这样:

    Calendar c = Calendar.getInstance();
    int startTime = c.get(Calendar.SECOND);
    
    ...
    
    Calendar c = Calendar.getInstance();
    int endTime = c.get(Calendar.SECOND);
    
    int secondsElapsed = endTime - startTime;
    

    编辑 :此方法的主要缺点是它不考虑时区变化或系统时间变化。如果这两个都不关你的事,那就好了。


    编辑2 :要保存 startTime 所以当应用程序关闭时不会丢失,请使用 SharedPreferences 。存储和检索值的示例 共享首选项 可以看到 here .

        2
  •  1
  •   Community kfsone    7 年前

    如果你真的担心“开始”按钮按下后的时间,你可能需要 elapsedRealtime -系统时钟可以被控制,但即使是经过的时间也会随着手机的重启而重置,所以要谨慎,但这应该能满足您的大部分需求。

    请参阅此帖子: Know if uptime timer is reset or Android has been rebooted

        3
  •  0
  •   Viacheslav    9 年前

    你应该使用 Alarm Manager 。它利用 PendingIntent 向应用程序的组件发送通知,例如 BroadcastReceiver 在那里您可以处理延迟的作业。