2012-02-19 13 views
3

TextViewを使用して経過時間を100分の1秒まで表示する経過時間カウンタを実装しました。各更新時に、私の現在の実装では経過時間が読み込まれ、新しいStringがユーザが読めるようにフォーマットされて割り当てられ、このStringTextViewのテキストが更新されます。メモリを追加割り当てせずにTextViewテキストを更新することは可能ですか?

それぞれのStringは1秒間に1回しか使用されず、すぐに永久に破棄されるという膨大なメモリのようです。毎回新しいStringのために追加のメモリを割り当てずに、TextViewのテキストを継続的に更新する方法はありますか?私は現在、私のテキストの書式を設定するために使用しています。ここ

がメソッドです:

public static String formatTime(long time) { 
    int minute = (int) (time/60000); 
    int second = (int) (time/1000) % 60; 
    int hundredth = (int) (time/10) % 100; 
    return String.format("%02d:%02d:%02d", minute, second, hundredth); 
} 

呼び出し関数は、経過時間を計算し、この関数を呼び出して、その後すぐにTextViewsetText(String)を呼び出します。

答えて

1

あなたは良い仕事をしていると思います。本当に割り当てを避けたい場合は、文字列StringBufferを試してみてください。しかし、あなたはformat APIを手放さなければならず、あなたが思ったほどのパフォーマンスではないかもしれないすべてのurselfを実行しなければなりません。また、現在の実装ではスレッドセーフになっています。

+0

おかげで、いくつかの研究の後、私は 'String.Formatの()'関数を取り除くにはあまりにも便利であることを決定しました。私はそれをそのまま残します。 – happydude

1

のsetText()メソッドのドキュメントを通過するには、私はStringBuilderのもCharSequenceインタフェースを実装していることを発見し、さらに掘り..にメソッドシグネチャがあることを

setText(CharSequence text) 

に気づきました。

だから私は解決策はstart using StringBuilder instead of the Stringオブジェクトになると思います。

残念なことに、String.format()メソッドは使用できなくなるため、Formatterクラスの使用を開始する必要があります。

詳細はこちらFormatter Classをご覧ください。私はそれが役に立てば幸い

...

関連する問題