这是我的代码。它第一次发射然后停止。我想重复一遍。
new Handler().postDelayed(new Runnable() {
int i = 0;
String[] myStrings = { "http://192.168.1.199/jax.html", "http://192.168.1.199/jor.html" };
@Override
public void run() {
webView.loadUrl(myStrings[i]);
i++;
if (i ==2)
i = 0;
}
}, 5000);
答案 0 :(得分:1)
这将导致您的runnable重复。它每隔5秒就会调用一次。
final int TIME_BETWEEN_RELOAD = 5000;
final Handler myHandler = new Handler();
final Runnable reloadWebViewRunnable = new Runnable() {
@Override
public void run() {
Log.d("run", "running the runnable now");
// Continue the reload every 5 seconds
myHandler.postDelayed(this, TIME_BETWEEN_RELOAD);
}
};
// start the initial reload
myHandler.postDelayed(reloadWebViewRunnable, TIME_BETWEEN_RELOAD);
答案 1 :(得分:1)
您错误地使用了postDelayed
功能。延迟后意味着用于在指定的毫秒数后运行某些东西。来自Android Documentaion
postDelayed(Runnable r, long delayMillis)
使Runnable r添加到要运行的消息队列中 经过指定的时间后。
当然,您的代码将仅首次运行。你所做的只是增加5秒的延迟。
如果您想在定期间隔后开火,请考虑使用Count Down Timer或Alarm Manager。
如果你真的想使用postDelayed
,你可以这样做
Handler handler = new Handler();
int delay = 5000; //milliseconds
handler.postDelayed(new Runnable(){
public void run(){
//do something
handler.postDelayed(this, delay);
}
}, delay);
答案 2 :(得分:0)
您需要在runnable的run()函数内再次调用handler.postDelayed(runnable)。如果你这样做你现在正在做什么,它确实只会调用一次,因为这就是你告诉它要做的事情。
所以我建议为处理程序创建一个变量,为runnable创建另一个变量,而不是使用 new Handler(){} 和 new Runnable(){} ,在这种情况下,只是为了让它更容易。所以你会有这样的事情:
Handler webHandler;
Runnable webRunnable;
//some other code in here you might have - remember to instantiate the handler
webRunnable = new Runnable(){
int i = 0;
String[] myStrings = { "http://192.168.1.199/jax.html", "http://192.168.1.199/jor.html" };
@Override
public void run() {
webView.loadUrl(myStrings[i]);
i++;
if (i ==2)
i = 0;
webHandler.postDelayed(webRunnable, 5000);
}
};
webHandler.postDelayed(webRunnable, 5000);
因此,调用postDelayed就像这样,一旦在run()函数之外,然后在里面,它将运行runnable,然后它会在5秒后反复调用自己