setTimeOut()javascript到Android的等价物是什么?

时间:2012-01-07 18:24:08

标签: java javascript android equivalent

我需要等效的代码setTimeOut(call function(),milliseconds); for android。

setTimeOut(call function(),milliseconds);

4 个答案:

答案 0 :(得分:21)

您可能想查看TimerTask

由于你再次提出这个问题,我想提出一个不同的建议,即Handler。它比TimerTask更简单,因为你不需要明确地调用runOnUiThread,因为Handler将与UI线程相关联,只要它在UI线程上创建,或者你使用它的构造函数中的主循环器创建它。它会像这样工作:

private Handler mHandler;
Runnable myTask = new Runnable() {
  @Override
  public void run() {
     //do work
     mHandler.postDelayed(this, 1000);
  }
}

@Override
public void onCreate(Bundle savedState) {
  super.onCreate(savedState);
  mHandler = new Handler(Looper.getMainLooper());
}
//just as an example, we'll start the task when the activity is started
@Override
public void onStart() { 
  super.onStart();
  mHandler.postDelayed(myTask, 1000);
}

//at some point in your program you will probably want the handler to stop (in onStop is a good place)
@Override
public void onStop() {
  super.onStop();
  mHandler.removeCallbacks(myTask);
}

在您的活动中,处理程序需要注意一些事项:

  1. 如果你没有在onStop中停止它,你的活动可以在你的处理程序仍在运行时关闭/不可见(或者如果你在onResume中启动它,那么onPause),如果你试图更新UI,这将导致问题< / LI>
  2. 如果您的手机进入深度睡眠状态,处理程序将不会像您指定的那样经常发射。我知道这一点,因为我已经用蓝牙设备进行了一些广泛的测试,以便在运行数小时后测试连接性。每次发射时我都使用处理程序和日志打印。
  3. 如果您需要此计时器,我建议将其置于一项持续时间超过活动的服务中。使用服务注册您的活动(通过实现服务中定义的接口与服务进行通信)。

答案 1 :(得分:11)

这是我在当前项目中使用的代码。 Matt说,我使用了TimerTask。 60000是milisec。 = 60秒我用它来刷新比赛分数。

private void refreshTimer() {
        autoUpdate = new Timer();
        autoUpdate.schedule(new TimerTask() {
            @Override
            public void run() {
                runOnUiThread(new Runnable() {
                    public void run() {
                        adapter = Score.getScoreListAdapter(getApplicationContext());
                        adapter.forceReload();
                        setListAdapter(adapter);
                    }
                });
            }
        }, 0, 60000);

答案 2 :(得分:1)

underscore-java库中有setTimeout()方法。我是该项目的维护者。

代码示例:

import com.github.underscore.lodash.U;
import com.github.underscore.Function;

public class Main {

    public static void main(String[] args) {
        final Integer[] counter = new Integer[] {0};
        Function<Void> incr = new Function<Void>() { public Void apply() {
            counter[0]++; return null; } };
        U.setTimeout(incr, 100);
    }
}

使用新线程将在100ms内启动该功能。

答案 3 :(得分:1)

作为使用java下划线的Valentyn回答的延续:

向Gradle添加依赖项:

dependencies {
    compile group: 'com.github.javadev', name: 'underscore', version: '1.15'
}

爪哇:

import com.github.underscore.lodash.$;

$.setTimeout(new Function<Void>() {
    public Void apply() {
        // work
        return null;
    }
}, 1000); // 1 second