我需要在应用程序中的一些活动上显示持续时间。计时器在其中一个 Activity 启动时启动。
- 我应该为计时器使用服务吗?
- 这是最好的方法吗?
- 或者我应该从 Activity 之一开始线程?
我需要在应用程序中的一些活动上显示持续时间。计时器在其中一个 Activity 启动时启动。
我认为在您描述的用例中,最好存储时间戳(请参阅Data Storage)并计算用于 GUI 的增量。如果您需要在其中一个活动中显示实时时钟,您可以在该活动中创建一个单独的线程来更新时钟。
好吧,根据显示进度所需的界面工作量,我将在活动中启动一个线程,然后创建一个计时器来检查线程进度的状态并根据需要更新界面。服务适用于不需要大量界面通知/更新的后台任务。
这是我目前正在处理的项目中的一个示例(UpdateListRunnable 只是在我的列表适配器上调用“notifyDataSetChanged()”。我在代码中多次执行此操作,因此我将其封装在一个类中。此外,updateHandler 只是一个常规处理程序实例):
@Override
public void run() {
Timer updateProgressTimer = null;
UpdateItem currentItem = null;
for(int i = 0; i < items.size(); i++) {
currentItemIndex = i;
currentItem = items.get(i);
if (currentItem.isSelected() == true) {
updateProgressTimer = new Timer();
updateProgressTimer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
updateHandler.post(new UpdateListRunnable());
}
}, 0, 2000); // check every 2 seconds
lookupDb.downloadUpdate(currentItem);
currentItem.setUpToDate(true);
currentItem.setStatusCode(UpdateItem.UP_TO_DATE);
currentItem.setProgress(0);
updateProgressTimer.cancel();
updateHandler.post(new UpdateListRunnable());
} // end if its the database we are hosting on our internal server
} // end for loop through update items
currentItemIndex = -1;
} // end updateThread run