我试图创建一个每0.1秒运行一次方法的线程。 在IOS中(目标C)代码看起来像这样:
NSTimer timer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(myMethod) userInfo:nil repeats:YES];
NSRunLoop *runner = [NSRunLoop currentRunLoop];
[runner addTimer:timer forMode: NSDefaultRunLoopMode];
并停止代码看起来像这样:
[timer invalidate];
如何查看Android代码执行相同的操作?
答案 0 :(得分:1)
如果您在iOS中寻找NSTimer
解决方案,则与
new Timer().scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
// Your code here
}
}, 0, 100);
这将在run方法
中每100毫秒+ CPU时间触发一次答案 1 :(得分:0)
这取决于代码中的currentRunLoop
。
我不知道iOS如何处理多个线程,但在Android中,您不能从后台线程触摸UI。重复的任务几乎总是以某种方式修改UI。
假设iOS有一个允许修改用户界面的特殊循环,currentRunLoop
就是这样(比较Looper.getMainLooper()
):
您需要在Android主线程中安排活动。为此,您需要使用附加到该主线程的Handler
。
要计划重复任务,您最有可能使用Handler
...Delayed
方法之一,延迟时间为100毫秒,以所需的速率安排代码。您也可以使用无限运行的CountDownTimer
来完成此操作。
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中几乎从来没有找到它的有效用途)是java.util.Timer
,因为它执行代码背景胎面。如果出于某种原因需要在后台执行重复任务,例如http请求,则可以使用它。
答案 2 :(得分:0)
试试这个:
m_handler = new Handler().postDelayed(new Runnable(){
@Override
public void run() {
//Do what you want
m_handler.run();
}
}, 100);
让我知道它是否适合你。