Android Thread像iOS Thread一样工作

时间:2014-11-28 12:46:41

标签: java android multithreading

我试图创建一个每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代码执行相同的操作?

3 个答案:

答案 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);

让我知道它是否适合你。