什么等同于 setTimeOut() javascript 到 Android?

2022-09-01 20:46:45

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

setTimeOut(call function(),milliseconds);

答案 1

您可能想查看TimerTask

既然你再次提出这个问题,我想提出一个不同的建议,这是一个处理程序。它比 TimerTask 更易于使用,因为您不需要显式调用 runOnUiThread,因为只要在 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 中停止处理程序(如果在 onStop 中启动它,则活动可能已关闭/不可见),如果您尝试更新 UI,这将导致问题
  2. 如果您的手机进入深度睡眠状态,处理程序将不会像您指定的那样频繁地触发。我知道这一点,因为我已经用蓝牙设备进行了一些广泛的测试,以便在运行数小时后测试连接性,并且每次触发时我都使用处理程序以及日志打印。
  3. 如果您需要此计时器持续进行,我建议将其放在比活动持续时间更长的服务中。向服务注册您的活动(通过实现服务中定义的用于与服务通信的接口)。

答案 2

这是我在当前项目中使用的代码。正如马特所说,我使用了TimerTask。60000是米利塞克。= 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);