【问题标题】:display data after every 10 seconds in Android在 Android 中每 10 秒显示一次数据
【发布时间】:2011-02-01 21:44:06
【问题描述】:

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

【问题讨论】:

  • @Farha,希望我的回答对您有所帮助。

标签: android alert delay


【解决方案1】:

有一种简单的方法可以在每 10 秒后显示一些数据。

@Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_launcher);
  ActionStartsHere();
}

public void ActionStartsHere() {
  againStartGPSAndSendFile();
}

public void againStartGPSAndSendFile() {
   new CountDownTimer(11000,10000) {
        @Override
        public void onTick(long millisUntilFinished) {
           // Display Data by Every Ten Second  
        }

        @Override
        public void onFinish() {
            ActionStartsHere();
        }
    }.start();
}   

【讨论】:

    【解决方案2】:

    使用Handler还有另一种方式

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

    【讨论】:

      【解决方案3】:

      每 10 秒自动刷新您的应用屏幕或 Activity 刷新

      在我尝试过的 onCreate() 方法中创建此代码对我有用

      Thread t = new Thread() {
      @Override
      public void run() {
      try {
        while (!isInterrupted()) {
          Thread.sleep(1000);
          runOnUiThread(new Runnable() {
            @Override
            public void run() {            
             //CALL ANY METHOD OR ANY URL OR FUNCTION or any view
            }
          });
        }
      } catch (InterruptedException e) {
      }
      }
      };t.start();
      

      【讨论】:

      • 这是不正确的方法在这里检查我的回答你的 ui 线程正在等待,这就是为什么你的应用程序可能会进入无响应模式
      • 我想自动调用 url 和方法或者我该怎么做
      【解决方案4】:

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

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

      Handler mHandler = new Handler();
      

      现在创建一个 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();
      

      【讨论】:

      • 不能引用在不同方法中定义的内部类中的非最终变量 mHandler
      • mHandler的修饰符应改为final
      【解决方案5】:

      Andrahu 在定义处理程序方面走在了正确的轨道上。如果您有一个调用更新函数的处理程序,您可以简单地将delay the message 发送到处理程序 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);
      

      现在您的 handleMessage 函数将在 10 秒后被调用。您可以在更新函数中发送另一条消息,导致整个周期一遍又一遍地运行

      【讨论】:

        【解决方案6】:

        可能最简单的做法是:

        while(needToDisplayData)
        {
            displayData(); // display the data
            Thread.sleep(10000); // sleep for 10 seconds
        }
        

        您也可以使用计时器:

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

        【讨论】:

        • Lirik,您的第一个解决方案会引发 ANR,这绝对是不可取的。如果您提到 timer.scheduleAtFixedRate 是否会为要执行的任务创建一个新线程或使用调用它的同一线程,那就更好了。
        • 第一个冻结 ui,第二个抛出 ex:java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
        猜你喜欢
        • 2019-09-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多