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