如何在活动中显示计时器?

时间:2009-07-15 17:17:43

标签: android timer android-activity

我需要在应用程序中的一些活动上显示持续时间。当其中一个Activity启动时,计时器启动。

  • 我应该为定时器使用服务吗?
  • 这是最好的方法吗?
  • 或者我应该从其中一个活动开始线程吗?

2 个答案:

答案 0 :(得分:2)

我认为在用例中你最好存储时间戳(参见Data Storage)和计算用于GUI使用的增量。如果您需要在某个活动中显示实时时钟,您可以在该活动中创建一个单独的线程来更新时钟。

答案 1 :(得分:1)

那么,根据显示进度需要多少接口工作,我会在活动中启动一个线程,然后创建一个计时器来检查线程进度的状态并根据需要更新接口。服务适用于不需要大量接口通知/更新的后台任务。

这是我正在处理的项目的一个示例(UpdateListRunnable只在我的列表适配器上调用“notifyDataSetChanged()”。我在代码中多次执行它,所以我将它封装在一个类中。此外,updateHandler只是常规的Handler实例):

@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