2

我有 Singleton 类,它包含所有数据(某个站点的访问者),并且数据由服务更新。我有一个接口,它由(列表)活动(显示访问者)实现,所以现在当我更新数据时,我只需调用接口方法,以便列表活动可以刷新它。

现在我需要保持访问者在现场的时间(在客户端)。我想在 Singleton 类中创建一个线程,该线程将在每秒后运行一个循环,但我无法使用处理程序在主线程上调用任何方法。这是线程的代码:

void startHeavyDutyStuff() {
          Thread t = new Thread() {
              public void run() {
                  try {
                      while(true) {
                          sleep(1000);
                          ArrayList<VisitorMC> data =  SharedAppManager.appManager().visitorsData;

                          boolean doReload = false;
                          for (VisitorMC item: data) {
                              item.secsOnSite++;
                              if(item.secsOnSite == 60) {
                                  item.secsOnSite = 0;
                                  item.minsOnSite++;
                                  doReload = true;  
                              }
                          }
                          if(doReload) {
                              messageHandler.sendEmptyMessage(1);
                          } else {
                              messageHandler.sendEmptyMessage(0);
                          }
                      }
                  } catch (InterruptedException e) {
                      e.printStackTrace();
                  }
              }
          };
          t.start();
      }

这是我在主线程上制作处理程序的代码(在单例类中):

private SharedAppManager() {

            //Initialization of the data.

        Looper.prepare();
        messageHandler = new Handler() {
              public void handleMessage(Message msg) {  
                  switch(msg.what) {
                  case 0:
                      Log.d("THREAD", "after every second");
                      break;
                  case 1:
                      if(visitorsDelegate != null) {
                            visitorsDelegate.updateVisitorsTime();
                        }
                      break;
                  default:
                  }
              }
          };
        startHeavyDutyStuff();
    }

我在这里做错了什么?

编辑:我需要每秒钟更新一次 UI,这就是为什么我运行一个单独的线程可以更改数据并在 UI 上调用更新。

4

0 回答 0