2

私の Android アプリではTextView、ユーザーにデータの経過時間 (「13 分前」) を伝えています。私は現在、これを a を使用して毎秒更新し、分がアダプターにRunnable変更されたときにキャッチします。notifyDataSetChanged()しかし、これは毎秒ガベージコレクションを引き起こしています...

TextViewシステムクロックが毎秒チェックせずに分を変更したときに、更新をトリガーする (または一般的なアクションを実行する) 別の方法はありますか?

4

4 に答える 4

6

Runnable とコールバックを既に設定しているので、モジュロを使用して次の更新がいつ発生するかを計算します。

handler.postDelayed(runnable, 
        DateUtils.MINUTE_IN_MILLIS - System.currentTimeMillis % DateUtils.MINUTE_IN_MILLIS);

これにより、59 秒、30 秒、または 1 秒離れているかどうかに関係なく、次の分が発生したときにコールバックが実行されます。注意として、Runnable が 1 つの TextView のみを更新するDateUtils.HOUR_IN_MILLIS場合、イベントが 1 時間経過したときに切り替えることを忘れないでください。毎分「1 時間前」に更新する意味はありません。

DateUtils.getRelativeTimeSpanString()「x 分前」の文字列を作成するのに役立つメソッドが見つかるかもしれません。

于 2013-01-29T18:45:42.273 に答える
4

サムの答えは完全に良いですが、質問に完全に適合するので、これを追加します。実際には、時計が変わると毎分システムからブロードキャストが送信されます。マニフェストを介さずに、コードに手動で登録されたIntent.ACTION_TIME_TICKを使用してのみ受信できます。こちらBroadCastReceiverのドキュメントを参照してください。

于 2013-01-29T18:59:26.120 に答える
0

固定期間でTimerオブジェクトを使用します。

メソッドはTimerTaskオブジェクトを取ります。

Googleのタイマーのドキュメントを参照してください

アクティビティを停止するときにタイマーをキャンセルすることを忘れないでください

于 2013-01-29T18:50:38.320 に答える
0

サムの素晴らしい答え以外に、これにはもっときれいな解決策があります。

http://developer.android.com/reference/android/text/format/DateUtils.htmlを使用して期間を見つけandroid.intent.action.TIME_TICK、リストビューで時間を更新する場所を登録します。

ここに別の同じ質問と回答があります

于 2013-01-29T19:02:03.497 に答える