アクティビティにタイマーを表示するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/1132734

  •  16-09-2019
  •  | 
  •  

質問

アプリケーション内のいくつかのアクティビティの継続時間を表示する必要があります。いずれかのアクティビティが開始されると、タイマーが開始されます。

  • タイマー用のサービスを使用する必要がありますか?
  • これが最善の方法ですか?
  • それともアクティビティの 1 つからスレッドを開始する必要がありますか?
役に立ちましたか?

解決

あなたが説明しているユースケースでは、次のことが最善だと思います タイムスタンプ (を参照) データストレージ) そして 計算する GUI で使用するためのデルタ。アクティビティの 1 つでリアルタイム クロックを表示する必要がある場合は、クロックを更新するためだけにそのアクティビティに別のスレッドを作成できます。

他のヒント

さて、あなたはあなたの進行状況を表示する必要がどのくらいのインタフェース作業に応じて、私は活動の中に、スレッドを開始し、スレッドの進捗状況をチェックし、必要に応じてインターフェイスを更新し、タイマーを作成します。サービスは、インターフェイス通知/アップデートの多くを必要としないバックグラウンドタスクに適しています。

ここで私が現在働いているプロジェクトからの例です(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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top