假设我想每10秒执行一次操作,它不一定需要更新视图。
问题是:像这样使用timer和timertask是不是更好(我的意思是更高效和有效):
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);
此外,如果您能解释一下何时使用哪种方法,以及为什么其中一种方法比另一种方法更有效(如果确实如此),我将不胜感激。
发布于 2016-10-31 17:38:52
Handler
TimerTask
**.**比更好
Java TimerTask
和Android Handler
都允许您在后台线程上调度延迟和重复的任务。然而,文献中压倒性地推荐在安卓系统中使用Handler
而不是TimerTask
(参见here、here、here、here、here和here)。
报告的有关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);
与相关的
发布于 2013-12-02 22:19:55
使用定时器有一些缺点
它只创建单个线程来执行任务,如果一个任务运行时间太长,其他任务就会受到影响。它不处理任务引发的异常,线程只是终止,这会影响其他计划任务,并且这些任务永远不会运行
复制自:
发布于 2019-06-05 15:03:07
接受答案的Kotlin版本:
// 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)
https://stackoverflow.com/questions/20330355
复制相似问题