Android / Java中的JavaScript setInterval / setTimeout相当于什么?

任何人都可以告诉我,如果等于setInterval / setTimeout存在为Android? 有没有人有关于如何做的例子?

提前致谢!

与Android一样,有很多方法可以做到这一点,但是假设你只是稍后在同一个线程上运行一段代码,我使用下面的代码:

new android.os.Handler().postDelayed( new Runnable() { public void run() { Log.i("tag", "This'll run 300 milliseconds later"); } }, 300); 

..这几乎相当于

 setTimeout( function() { console.log("This will run 300 milliseconds later"); }, 300); 

的setInterval()

函数每n毫秒重复一次

使用Javascript

  setInterval(function(){ Console.log("A Kiss every 5 seconds"); }, 5000); 

近似java等效

 new Timer().scheduleAtFixedRate(new TimerTask(){ @Override public void run(){ Log.i("tag", "A Kiss every 5 seconds"); } },0,5000); 

的setTimeout()

函数仅在n毫秒后才起作用

使用Javascript

 setTimeout(function(){ Console.log("A Kiss after 5 seconds"); },5000); 

近似java等效

 new android.os.Handler().postDelayed( new Runnable() { public void run() { Log.i("tag","A Kiss after 5 seconds"); } }, 5000); 

根据你真正想要达到的目标,你应该看看Android Handlers:

http://developer.android.com/reference/android/os/Handler.html

如果你以前使用javascript setTimeout()等来安排将来运行的任务,这是Android的方式(postDelayed / sendMessageDelayed)。

请注意,“处理程序”或“定时器”都不会使Android手机从睡眠模式中唤醒。 换句话说,即使屏幕closures/ cpu处于睡眠状态,如果要安排实际发生的事情,也需要检查AlarmManager。

如果您不担心唤醒手机或从死亡中恢复应用程序,请尝试:

 // Param is optional, to run task on UI thread. Handler handler = new Handler(Looper.getMainLooper()); Runnable runnable = new Runnable() { @Override public void run() { // Do the task... handler.postDelayed(this, milliseconds) // Optional, to repeat the task. } }; handler.postDelayed(runnable, milliseconds); // Stop a repeating task like this. hander.removeCallbacks(runnable); 

我对JavaScript并不了解,但我认为定时器可能就是你正在寻找的东西。

http://developer.android.com/reference/java/util/Timer.html

从链接:

计划在绝对时间或相对延迟后运行一次。 定期任务按固定期限或固定利率安排。

下面是一个setTimeout的等价物,在延迟之后尝试更新用户界面时最为有用。

如您所知,更新用户界面只能通过UI线程完成。 AsyncTask通过从该线程调用onPostExecute方法为你做到这一点。

 new AsyncTask<Void, Void, Void>() { @Override protected Void doInBackground(Void... params) { try { Thread.sleep(5000); } catch (InterruptedException e) { } return null; } @Override protected void onPostExecute(Void result) { // Update the User Interface } }.execute(); 
 import java.util.Timer; import java.util.TimerTask; class Clock { private Timer mTimer = new Timer(); private int mSecondsPassed = 0; private TimerTask mTask = new TimerTask() { @Override public void run() { mSecondsPassed++; System.out.println("Seconds passed: " + mSecondsPassed); } }; private void start() { mTimer.scheduleAtFixedRate(mTask, 1000, 1000); } public static void main(String[] args) { Clock c = new Clock(); c.start(); } } 

第一个答案肯定是正确的答案,并且是基于这个lambda版本的,这在语法上要短得多。 由于Runnable只有一个覆盖方法“run()”,我们可以使用lambda:

 this.m_someBoolFlag = false; new android.os.Handler().postDelayed(() -> this.m_someBoolFlag = true, 300);