在Android中每10秒显示一次数据

Far*_*ari 29 alert android delay

我必须每隔10秒显示一些数据.谁能告诉我怎么做?

小智 59

您还可以使用另一种方法在特定时间间隔内更新UI.以上两个选项是正确的,但取决于您可以使用其他方式在特定时间间隔更新UI的情况.

首先为Handler声明一个全局变量,以便从Thread更新UI控件,如下所示

Handler mHandler = new Handler();
Run Code Online (Sandbox Code Playgroud)

现在创建一个Thread并使用while循环来定期使用线程的sleep方法执行任务.

 new Thread(new Runnable() {
        @Override
        public void run() {
            // TODO Auto-generated method stub
            while (true) {
                try {
                    Thread.sleep(10000);
                    mHandler.post(new Runnable() {

                        @Override
                        public void run() {
                            // TODO Auto-generated method stub
                            // Write your code here to update the UI.
                        }
                    });
                } catch (Exception e) {
                    // TODO: handle exception
                }
            }
        }
    }).start();
Run Code Online (Sandbox Code Playgroud)


Kir*_*ril 11

可能最简单的事情是:

while(needToDisplayData)
{
    displayData(); // display the data
    Thread.sleep(10000); // sleep for 10 seconds
}
Run Code Online (Sandbox Code Playgroud)

或者你可以使用一个Timer:

int delay = 1000; // delay for 1 sec. 
int period = 10000; // repeat every 10 sec. 
Timer timer = new Timer(); 
timer.scheduleAtFixedRate(new TimerTask() 
    { 
        public void run() 
        { 
            displayData();  // display the data
        } 
    }, delay, period); 
Run Code Online (Sandbox Code Playgroud)

  • 第一个解决方案将冻结UI线程. (17认同)
  • Lirik,你的第一个解决方案是扔ANR绝对不可取.如果你提到timer.scheduleAtFixedRate会为要执行的任务创建一个新线程,或者使用调用它的同一个线程,那就更好了. (2认同)

Jan*_*usz 7

Andrahu在正确的轨道上定义了一个处理程序.如果您有一个调用更新函数的处理程序,您只需发送到处理程序的消息延迟 10秒.

通过这种方式,您不需要启动自己的线程或类似的东西,这将导致奇怪的错误,调试和维护问题.

只需致电:

 Handler myHandler = new MyUpdateHandler(GUI to refresh); <- You need to define a own handler that simply calls a update function on your gui.
 myHandler.sendMessageDelayed(message, 10000);
Run Code Online (Sandbox Code Playgroud)

现在你的handleMessage函数将在10秒后被调用.您可以在更新功能中发送另一条消息,导致整个周期反复运行


小智 7

使用Handler还有另一种方法

final int intervalTime = 10000; // 10 sec
Handler handler = new Handler();
handler.postDelayed(new Runnable()  {   
 @Override
 public void run() {
    //Display Data here
   }
 }, intervalTime);
Run Code Online (Sandbox Code Playgroud)