假设我想每10秒执行一次操作,它不一定需要更新视图。
问题是:在timertask中使用timer是否更好(我的意思是更高效、更有效):
final Handler handler = new Handler();
TimerTask timertask = new TimerTask() {
@Override
public void run() {
handler.post(new Runnable() {
public void run() {
<some task>
}
});
}
};
timer = new Timer();
timer.schedule(timertask, 0, 15000);
}
或者只是一个有延迟的处理程序
final Handler handler = new Handler();
final Runnable r = new Runnable()
{
public void run()
{
<some task>
}
};
handler.postDelayed(r, 15000);
此外,如果您能解释什么时候使用哪种方法,以及为什么其中一种方法比另一种更有效(如果确实有效),我将不胜感激。
静态编程语言版本的公认答案:
// execute on the main thread, empty constructor is deprecated
val handler = Handler(Looper.getMainLooper())
val runnableCode = object : Runnable {
override fun run() {
Log.d("Handlers", "Called on main thread")
handler.postDelayed(this, 2000)
}
}
// or shorter using a lambda function
val runnableCode = Runnable {
Log.d("Handlers", "Called on main thread")
handler.postDelayed(this, 2000)
}
handler.post(runnableCode)
使用Timer有一些缺点
它只创建一个线程来执行任务,如果一个任务运行时间过长,其他任务就会受到影响。它不处理任务引发的异常,线程只是终止,这会影响其他计划任务,并且它们永远不会运行
复制自:
TimerTask vs Thread.sleepvs Handler postDelayed-每N毫秒调用函数最准确?
处理程序
优于TimerTask
。
JavaTimerTask
和AndroidHandler
都允许您在后台线程上安排延迟和重复的任务。然而,文献压倒性地建议在Android中使用Handler
而不是TimerTask
(参见这里、这里、这里、这里和这里)。
TimerTask报告的一些问题包括:
我见过的各种Android示例的最佳来源是CoDepath。这是一个用于重复任务的Handler
示例。
// Create the Handler object (on the main thread by default)
Handler handler = new Handler();
// Define the code block to be executed
private Runnable runnableCode = new Runnable() {
@Override
public void run() {
// Do something here on the main thread
Log.d("Handlers", "Called on main thread");
// Repeat this the same runnable code block again another 2 seconds
handler.postDelayed(runnableCode, 2000);
}
};
// Start the initial runnable task by posting through the handler
handler.post(runnableCode);
相关的
我们已经知道如何处理缓慢的I/O操作。让我们看一个与I/O无关的耗时的任务。例如,我们修改loadList()函数并创建一个新的slow函数发射我们已安装的app数据。 private Observable<AppInfo> getObservableApps(List<AppInfo> apps) { return Observable .create(subscriber -> {
我正在尝试将一个向服务器发送消息的异步任务迁移到RxJava。该任务大致执行以下操作: 1) 创建将要发送的消息(保存到数据库) 2)向用户显示消息(状态为“发送”) 3)将消息发送到服务器(下面的代码段) 4)将消息标记为已发送或失败(保存到数据库) 5)更新UI 我创建了所需的Rx链,部分如下所示: 当我订阅上述内容时,我会得到一个一次性的。通常,我会将其添加到CompositeDisposa
问题内容: 我正在尝试每1分钟显示一次味精!不停!我发现一个示例,它在固定延迟后仅显示一次味精!你能帮忙设置吗?或者如果使用计时器更好,我需要一个例子!! 谢谢! 问题答案: 试试这个代码-
我有一个批处理文件,其中包含以下代码以停止和启动SQL报告服务: 我已经设置了每天运行的计划任务,它目前以SYSTEM的形式运行,并设置了最高权限。我在操作上设置了文件夹中的开始选项,通常一切似乎都设置正确。但是当我运行任务时,似乎什么都没有发生,它说任务已经运行,但我看不到服务已经按预期重新启动。 有人能告诉我我错过了什么吗?
如何从Anable剧本和处理程序运行单个任务,并在该任务成功完成时收到通知,同时跳过相关剧本中的所有其他任务? 目前,我执行以下操作: 然后在任务完成后按Ctrlc。但是,这也将跳过处理程序。 我知道我可以给任务添加一个标签并使用它,就像在ansible playbook中如何只运行一个任务?,但我更希望能够在不添加标签的情况下做到这一点。这可能吗?
本文向大家介绍Java实现任务超时处理方法,包括了Java实现任务超时处理方法的使用技巧和注意事项,需要的朋友参考一下 任务超时处理是比较常见的需求,比如在进行一些比较耗时的操作(如网络请求)或者在占用一些比较宝贵的资源(如数据库连接)时,我们通常需要给这些操作设置一个超时时间,当执行时长超过设置的阈值的时候,就终止操作并回收资源。Java中对超时任务的处理有两种方式:一种是基于异步任务结果的超时