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