在Android/Java中,JavaScript setInterval/setTimeout的等效值是什么?
有人能告诉我Android是否存在setInterval/setTimeout的等效值吗?有没有人能举例说明如何使用JavaScript?我对JavaScript了解不多,但我认为计时器可能是您所需要的 从链接:在Android/Java中,JavaScript setInterval/setTimeout的等效值是什么?,java,javascript,android,settimeout,Java,Javascript,Android,Settimeout,有人能告诉我Android是否存在setInterval/setTimeout的等效值吗?有没有人能举例说明如何使用JavaScript?我对JavaScript了解不多,但我认为计时器可能是您所需要的 从链接: 计划在绝对时间或相对延迟后运行一次放炮。周期性任务的计划可以是固定的周期,也可以是固定的速率。根据您实际想要实现的目标,您应该看看Android处理程序: 如果您以前使用javascript setTimeout()等来计划将来运行的任务,这是Android的方法(postDela
计划在绝对时间或相对延迟后运行一次放炮。周期性任务的计划可以是固定的周期,也可以是固定的速率。根据您实际想要实现的目标,您应该看看Android处理程序: 如果您以前使用javascript setTimeout()等来计划将来运行的任务,这是Android的方法(postDelayed/sendMessageDelayed)
请注意,无论是处理器还是定时器都不会让Android手机从睡眠模式中醒来。换句话说,如果您想在屏幕关闭/cpu处于休眠状态的情况下安排实际发生的事情,您也需要查看AlarmManager。这里有一个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();
newasynctask(){
@凌驾
受保护的Void doInBackground(Void…参数){
试一试{
睡眠(5000);
}捕捉(中断异常e){
}
返回null;
}
@凌驾
受保护的void onPostExecute(void结果){
//更新用户界面
}
}.execute();
如果您不担心唤醒手机或让应用死而复生,请尝试:
// 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.
handler.removeCallbacks(runnable);
与Android一样,有很多方法可以做到这一点,但假设您只是想稍后在同一线程上运行一段代码,我使用以下方法:
new android.os.Handler(Looper.getMainLooper()).postDelayed(
new Runnable() {
public void run() {
Log.i("tag", "This'll run 300 milliseconds later");
}
},
300);
new Timer().scheduleAtFixedRate(new TimerTask(){
@Override
public void run(){
Log.i("tag", "Hai Codemaker");
}
},0,1000);
。。这相当于
setTimeout(
function() {
console.log("This will run 300 milliseconds later");
},
300);
setInterval()
每n毫秒重复一次的函数
Javascript
setInterval(function(){ Console.log("A Kiss every 5 seconds"); }, 5000);
setTimeout(function(){ Console.log("A Kiss after 5 seconds"); },5000);
近似值java等效值
new Timer().scheduleAtFixedRate(new TimerTask(){
@Override
public void run(){
Log.i("tag", "A Kiss every 5 seconds");
}
},0,5000);
new android.os.Handler().postDelayed(
new Runnable() {
public void run() {
Log.i("tag","A Kiss after 5 seconds");
}
}, 5000);
setTimeout()
仅在n毫秒后工作的函数
Javascript
setInterval(function(){ Console.log("A Kiss every 5 seconds"); }, 5000);
setTimeout(function(){ Console.log("A Kiss after 5 seconds"); },5000);
近似值java等效值
new Timer().scheduleAtFixedRate(new TimerTask(){
@Override
public void run(){
Log.i("tag", "A Kiss every 5 seconds");
}
},0,5000);
new android.os.Handler().postDelayed(
new Runnable() {
public void run() {
Log.i("tag","A Kiss after 5 seconds");
}
}, 5000);
第一个答案肯定是正确的,是我基于lambda版本的,它的语法要短得多。由于Runnable只有1个重写方法“run()”,因此我们可以使用lambda:
this.m_someBoolFlag = false;
new android.os.Handler().postDelayed(() -> this.m_someBoolFlag = true, 300);
我正在为android创建一个mp3播放器,我想每500毫秒更新一次当前时间,所以我这样做了 设定间隔
private void update(){
新的android.os.Handler().postDelayed(新的Runnable()){
@凌驾
公开募捐{
long cur=player.getCurrentPosition();
long dur=player.getDuration();
currentTime=毫秒至时间(cur);
currentTimeView.setText(当前时间);
if(cur
它递归调用相同的方法Kotlin:
您还可以使用倒计时:
class Timer {
companion object {
@JvmStatic
fun call(ms: Long, f: () -> Unit) {
object : CountDownTimer(ms,ms){
override fun onFinish() { f() }
override fun onTick(millisUntilFinished: Long) {}
}.start()
}
}
}
在您的代码中:
Timer.call(5000) { /*Whatever you want to execute after 5000 ms*/ }
与Android一样,有很多方法可以做到这一点,但假设您只想在同一线程上运行一段代码,我使用以下方法:
new android.os.Handler(Looper.getMainLooper()).postDelayed(
new Runnable() {
public void run() {
Log.i("tag", "This'll run 300 milliseconds later");
}
},
300);
new Timer().scheduleAtFixedRate(new TimerTask(){
@Override
public void run(){
Log.i("tag", "Hai Codemaker");
}
},0,1000);
此代码将每隔一秒钟记录一次Hai Codemaker文本。注意:它在后台线程上调用您,而不是在主/UI线程上调用您。这不是答案,而是对外部信息的引用,这些信息可能包含或可能不包含OPs解决方案。请在相关代码中粘贴OP即可使用!1.类似地,
onProgressUpdate()
也可用于模拟setInterval()
。2. AsyncTask
在线程池(或仅在单个线程)上运行,因此。它可能需要等待另一个AsyncTask
完成;B它将占用池中的一个线程。在这种情况下使用异步任务会有很多问题(只有一个线程,并且线程被无故锁定)-其他解决方案要好得多。这是抽屉选择和碎片交易的一个非常好的解决方案。如果需要,我如何取消它?如何在run()方法中获取活动范围?@Andy如下:MyActivityName.This.myFunctionOnActivity()
@QuentinRoy:Handler timeout=new Handler();最终可运行r=新可运行{…};超时。后延迟(r,300)如果要取消它:timeout.removeCallbacks(r)
对于scheduleAtFixedRate
方法,在活动完成后如何取消活动中的计时器?@user824294您可以将计时器实例保存在变量中,并在要停止计划任务时调用“cancel()”-timer t=new timer();t、 时间表固定日期(…);-然后调用t.cancel();在我的手机(华为P Smart)上,处理器不会将设备从睡眠模式唤醒()