Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 简单计时器应用程序的体系结构_Java_Android_Timer - Fatal编程技术网

Java 简单计时器应用程序的体系结构

Java 简单计时器应用程序的体系结构,java,android,timer,Java,Android,Timer,我目前正在开发一个非常简单的倒计时应用程序。我需要一些关于计时器的正确架构的建议,它既可以在应用程序关闭时启动,也可以在应用程序打开时显示进度 到目前为止,我所拥有的是一个简单的处理程序,它每100毫秒执行一次Runnable,以更新进度条并像这样再次调用处理程序 // ... // start the timer tickHandler.postDelayed(runnable, 100); // ... private Handler tickHandler = new Handler(

我目前正在开发一个非常简单的倒计时应用程序。我需要一些关于计时器的正确架构的建议,它既可以在应用程序关闭时启动,也可以在应用程序打开时显示进度

到目前为止,我所拥有的是一个简单的
处理程序
,它每100毫秒执行一次
Runnable
,以更新进度条并像这样再次调用处理程序

// ...
// start the timer

tickHandler.postDelayed(runnable, 100);
// ...

private Handler tickHandler = new Handler();

private Runnable runnable = new Runnable(){
    @Override
    public void run() {
        if(tick()){
            tickHandler.postDelayed(this, 100);
        }
    }
};
现在我想让
计时器
即使在应用程序关闭时也能运行。我首先想到了一个
服务
,但后来发现了
AlarmManager
类,它可以完成这项工作,而且更易于使用。然而,我不仅希望能够发布通知到通知中心,而且希望应用程序再次打开,并显示计时器已经完成

这可以通过
AlarmManager
完成,还是需要实施
服务
?该应用程序的体系结构看起来如何,从
活动
服务
的控制传递到哪里,更重要的是,从哪里返回


谢谢你的提示

我想,AlarmManager正是您想要的:

取自

Alarm Manager适用于希望在特定时间运行应用程序代码的情况,即使应用程序当前未运行

因此,您可以注册意图,您希望在计时器完成后启动该意图,并向用户显示计时器已停止。因此,AlarmManager应该做到这一点


顺便说一句:使用服务也可能有效,但会带来其他影响。例如,您的应用程序必须在启动阶段启动,这将使其无法安装在外部存储上。请参见

这两种方法都可以正常工作(不过,如果您使用AlarmManager,当您的活动可见时,您仍然需要跟踪计时器的可视表示时间)。只需选择您认为最容易理解和实施的方法。并阅读活动生命周期。在理解活动生命周期的最初阶段,您会犯一些错误(但这是完全正常的,生命周期一开始根本不是直观的,使用像您这样的示例来完成它是最好的学习方式)是的,我想我会使用AlarmManager和我已经在工作的处理程序来跟踪应用程序打开的时间。我将更详细地研究活动生命周期,以使其正确。谢谢因此,我将尝试使用AlarmManager。谢谢,我会记住服务的含义!