Android Chronometer始终重置为00:00

时间:2017-07-05 15:03:35

标签: android chronometer

在我正在开发的应用程序中,我需要一个计时器来跟踪从第一次登录到达到某个目标的时间。对于计时器,我一直在使用计时器。

我的问题是,如果用户强制关闭应用程序的后台应用程序,计时器将重置。即使应用程序被用户强制关闭,我也需要计时器保持并更新。

目前,我的代码如下:

            try{
            FileInputStream fileIn = openFileInput(timerFilename);
            InputStreamReader InputRead = new InputStreamReader(fileIn);

            char[] timeInputBuffer = new char[HomeScreen.READ_BLOCK_SIZE];
            t="";
            int timeCharRead;

            while((timeCharRead = InputRead.read(timeInputBuffer))> 0){
                String readString = String.copyValueOf(timeInputBuffer, 0, timeCharRead);
                t += readString;
            }
            InputRead.close();
        } catch(Exception e){
            e.printStackTrace();
        }

 if(t == null) {
        try {
            mChronometer.setBase(SystemClock.elapsedRealtime());
            mChronometer.start();
            FileOutputStream fileout = openFileOutput(timerFilename, MODE_PRIVATE);
            OutputStreamWriter outputWriter = new OutputStreamWriter(fileout);
            outputWriter.write(Long.toString(SystemClock.elapsedRealtime()));
            outputWriter.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    else{
        long currentTime = SystemClock.elapsedRealtime() - Long.parseLong(t);

        SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
        sdf.setTimeZone(TimeZone.getTimeZone("GMT"));

        mChronometer.setBase(currentTime);
        mChronometer.setText(sdf.format(new Date(currentTime)));
        mChronometer.start();
    }

为简洁起见,我省略了一些不相关的代码。

主要问题是,在将currentTime长提供给mChronometer.setBase()然后调用mChronometer.start()后,计时器似乎完全随机,并且无法从我想要的位置开始。

我从在线研究中了解到,调用setBase()和start()仍然会导致计时器从00:00开始计数,但我的印象是调用mChronometer.setText()应该解决这个问题,它是不

所以我的问题是,即使应用程序被强行关闭,如何保持计时器准时?

1 个答案:

答案 0 :(得分:0)

来自developer.android.com

  

服务是在后台运行以执行的组件   长时间运行的操作或执行远程进程的工作。一个   服务不提供用户界面。例如,一项服务   当用户处于不同的状态时,可能会在后台播放音乐   应用程序,或者它可以通过网络获取数据而不会阻塞   用户与活动的互动。另一个组件,如   activity,可以启动服务并让它按顺序运行或绑定到它   与它互动。服务是作为服务的子类实现的   您可以在服务开发者指南中了解有关它的更多信息。

因此,只要您创建服务,并且用户退出您的应用程序,它仍然会运行。就像上面的例子一样。

这应该为您提供所需的所有信息: https://developer.android.com/guide/components/services.html

您还可以参考this获取有关如何实施在服务中运行的倒数计时器的示例。

修改

Chronometer是Android中的UI小部件(实际上是TextView)。因此,您无法将其用于非UI用途。请尝试使用TimerCountDownTimer

有关TimerService的示例用法,请参阅此内容:

https://stackoverflow.com/a/3819721/5250273