すべてのデータ (サイトの訪問者) を保持する 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の更新を呼び出すことができる別のスレッドを実行しています。