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