2

すべてのデータ (サイトの訪問者) を保持する 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