Java 是否可以创建每0.1秒运行一次的线程?后果是什么?
我正在尝试创建一个每0.1秒运行一次的线程。 很多需要很短时间更新的应用程序动画-它们使用什么 用一个简单的Java 是否可以创建每0.1秒运行一次的线程?后果是什么?,java,android,multithreading,Java,Android,Multithreading,我正在尝试创建一个每0.1秒运行一次的线程。 很多需要很短时间更新的应用程序动画-它们使用什么 用一个简单的定时器执行它将是一个好的解决方案?我想知道性能和CPU使用情况 我想创建我自己的动画,需要这种刷新,有什么最佳实践吗?如果你想在iOS中寻找解决方案作为NSTimer,那么这与 new Timer().scheduleAtFixedRate(new TimerTask() { @Override public void run
定时器执行它将是一个好的解决方案?我想知道性能和CPU使用情况
我想创建我自己的动画,需要这种刷新,有什么最佳实践吗?如果你想在iOS中寻找解决方案作为NSTimer
,那么这与
new Timer().scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
// Your code here
}
}, 0, 100);
这将在run方法中每100毫秒+CPU时间触发一次,这取决于代码中的currentRunLoop
我不知道iOS如何处理多个线程,但在Android中,你不能从后台线程触摸UI。重复的任务几乎总是以某种方式修改UI
假设iOS有一个允许修改UI的特殊循环,currentRunLoop
就是这样(比较):
您需要在Android的主线程中安排事件。为此,您需要使用附加到该主线程的
要计划重复的任务,您最有可能使用处理程序的…Delayed
方法之一,延迟100ms,以期望的速率计划代码。您也可以选择使用一个无限运行,它已经做到了这一点
CountDownTimer timer = new CountDownTimer(Long.MAX_VALUE, 100) {
@Override
public void onTick(long millisUntilFinished) {
// Do Something Here
}
@Override
public void onFinish() { /* won't happen */ };
}
timer.start();
在这种情况下,你应该不要使用的一件事(我几乎从来没有在Android中找到它的有效用途)是因为它在后台执行代码。如果出于某种原因,您的重复任务需要在后台执行,例如http请求,您可以使用它。尝试以下方法:
m_handler = new Handler().postDelayed(new Runnable(){
@Override
public void run() {
//Do what you want
m_handler.run();
}
}, 100);
让我知道它是否适用于您。正确的答案在很大程度上取决于您为什么希望每0.1秒运行一个方法,以及该方法的作用。要添加Commonware的答案,影响选择的因素是:1)您需要精确的0.1秒,还是至少0.1秒?2) 操作将消耗多少资源(包括CPU时间)?如果操作未在0.1秒内完成,则必须执行什么操作?应用程序已崩溃。。?你能提供stacktrace和reasonwhat吗?下面是代码:new Timer().scheduleAtFixedRate(new TimerTask(){@Override public void run(){circle.setX(circleX+10);circle.setY(circleY+10);}},0100);你们说应用程序崩溃了,所以崩溃通常会产生跟踪和原因。所以请提供这些信息。它只工作一次。@NirGofman它应该每100毫秒做一次,你能添加一些吗(Android)为您的问题编写代码,以便我们了解您是如何使用所有这些的?它给出了一个错误:m\u处理程序无法解析为变量,并且此错误:m\u处理程序无法解析您应该这样声明m\u处理程序:handler m\u处理程序
steal not work's:类型不匹配:无法从布尔值转换为HandlerOk..正在尝试更改吗方法..为什么倒计时不适合你?你必须重复多少次这种方法?