Android每5秒更新一次webview

时间:2018-03-12 20:26:00

标签: java android

这是我的代码。它第一次发射然后停止。我想重复一遍。

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

3 个答案:

答案 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 TimerAlarm 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秒后反复调用自己