Android 计时器还是日历。秒?

Android 计时器还是日历。秒?,android,Android,这是我用来根据变量update\u interval的值重复执行asynctask的代码段 我编写的计时器方法以秒为单位返回时钟 我的疑问是: 我是否需要使用Timer类实现上述目的? 哪一个CPU开销较小;定时器或以上策略 您的方法很好,除非您在循环中调用它,否则您需要一些空闲时间,如 Thread.sleep1000否则,您将占用100%的CPU。如果您重复执行后台任务,而不是使用处理程序使用AsncTask类,则会获得最佳性能,因为您将创建asyncTask类的每个重复新对象并执行doIn

这是我用来根据变量update\u interval的值重复执行asynctask的代码段

我编写的计时器方法以秒为单位返回时钟

我的疑问是: 我是否需要使用Timer类实现上述目的? 哪一个CPU开销较小;定时器或以上策略


您的方法很好,除非您在循环中调用它,否则您需要一些空闲时间,如
Thread.sleep1000否则,您将占用100%的CPU。

如果您重复执行后台任务,而不是使用处理程序使用AsncTask类,则会获得最佳性能,因为您将创建asyncTask类的每个重复新对象并执行doInBackground方法,这将非常耗费内存,而在处理程序中,您将创建一个对象并在每次重复过程中发布消息,或者在某些情况下,您尝试在Asynctask上实现单例设计模式 因此,您可以在重复中使用它创建一个对象,asynctask在一个进程而不是重复进程中非常有用

这里的例子介绍了如何以最佳方式安排定期任务,希望对您有所帮助

这里是关于单例异步tasl的示例


我在这里对您每次创建asyncTask对象并使用它时的另一个方面的评论,尝试创建一些单例模式或使用处理程序延迟您的计时器,您能详细说明一下吗。。是的,我在每个位置更改实例上调用这个save_logs_to_server方法。这将每次创建新的asynctask obj!!哦,这是一个很大的缺陷!!是的,你明白我的想法了,我为你添加了两种实现方法的答案,这两种方法将有助于你的代码性能。。。。我应该改变我重复这个任务的策略是的,试着使用它的源代码中提到的处理程序和消息类来支持singleton,这样可以避免代码内存问题
private void save_logs_to_server(Double lat, Double lon) {
        String vehicle_no = getSharedData("vehicle_no");
        if(timer()-my_timer>update_interval){
            DownloadWebPageTask task = new DownloadWebPageTask();
            task.execute(new String[] { server+"/save_logs.php?vehicleno="+vehicle_no+"&lat="+lat+"&lon="+lon+"&speed="+speed});
        my_timer=timer();
        }
        else if(timer()-my_timer<0){
        my_timer=0; 
        }

    }