【问题标题】:How to auto refresh data displayed in my Android Activity every second如何每秒自动刷新我的 Android Activity 中显示的数据
【发布时间】:2016-08-23 19:48:33
【问题描述】:

我需要每秒自动刷新 Activity 中显示的数据,我使用了 runnable、timer 等。这些工作完美,但几秒钟后 UI 很慢,有时没有响应。我读过IntentService,但我认为在IntentService 中使用无限循环并不是一个好主意。有什么我遗漏的,请帮忙。

【问题讨论】:

  • 如果屏幕上重新加载数据的过程耗时超过一秒?它是 CPU 密集型的吗?如果不是,您应该可以轻松地使用处理程序来发布延迟的可运行文件,并且不会影响 UI 性能。
  • 我检查过,发现重新加载数据恰好需要一秒钟,并且该过程占用的 CPU 不超过 5%,但 ui 有时没有响应。

标签: android runnable android-intentservice android-timer


【解决方案1】:

我会做这样的事情。

private Handler mRepeatHandler;
private Runnable mRepeatRunnable;
private final static int UPDATE_INTERVAL = 5000;
@Override
protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);

     mRepeatHandler = new Handler();
     mRepeatRunnable = new Runnable() {
          @Override
          public void run() {
               //Do something awesome

               mRepeatHandler.postDelayed(mRepeatRunnable, UPDATE_INTERVAL);
          };

     mRepeatHandler.postDelayed(mRepeatRunnable, UPDATE_INTERVAL);
}

@Override
protected void onDestroy() {
    super.onDestroy();

    mRepeatHandler.removeCallbacks(mRepeatRunnable);
}

【讨论】:

    【解决方案2】:

    也许这会有所帮助:

    private class WaitTimer extends TimerTask {
            @Override
            public void run() {
                //every 5 seconds
                if(millis % 5 == 0) {
                    //Do your magic here
                }
                millis+=1
            }
    }
    

    然后在onCreate()中

    millis = 0;
    timer = new Timer();
    timer.schedule(new WaitTimer(), 0, 1000);
    

    【讨论】:

      猜你喜欢
      • 2021-10-23
      • 2019-06-02
      • 2017-12-17
      • 1970-01-01
      • 1970-01-01
      • 2016-04-13
      • 1970-01-01
      • 1970-01-01
      • 2016-11-28
      相关资源
      最近更新 更多