アクティビティにタイマーを表示するにはどうすればよいですか?
-
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
所属していません StackOverflow