Android:Singleton类中的后台线程

时间:2011-11-25 13:06:51

标签: android multithreading background handlers

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

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

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

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

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上调用更新。

0 个答案:

没有答案