2011-06-19 4 views
4

TextViewに時刻と日付をリアルタイムで表示したい(分単位で更新する)。現在、私はこれを持っています。これはメモリ使用とAndroidのベストプラクティスを考慮して、これを実行する最善の方法ですか? (注意:DateFormatjava.text.DateFormatです)Androidで秒と時刻を更新する

private Thread dtThread; 

public void onCreate(Bundle savedInstanceState) { 
    ... 
    getDateAndTime(); 
} 

private void getDateAndTime() { 
    dtThread = new Thread(new Runnable() { 

     @Override 
     public void run() { 
      Log.d(TAG, "D/T thread started"); 
      while (!Thread.currentThread().isInterrupted()) { 
       try { 
        update(); 
        Thread.sleep(1000); 
       } catch (InterruptedException e) { 
        Log.d(TAG, "D/T thread interrupted"); 
       } 
      } 
     } 

     public void update() { 
      runOnUiThread(new Runnable() { 

       @Override 
       public void run() { 
        Date d = new Date(); 
        String time = DateFormat.getTimeInstance(DateFormat.MEDIUM).format(d); 
        String date = DateFormat.getDateInstance(DateFormat.LONG).format(d); 

        TextView timeView = (TextView) findViewById(R.id.textStartTime); 
        TextView dateView = (TextView) findViewById(R.id.textStartDate); 
        timeView.setText(time); 
        dateView.setText(date); 
       } 

      }); 
     } 

    }); 

    dtThread.start(); 
} 

protected void onPause() { 
    super.onPause(); 
    dtThread.interrupt(); 
    dtThread = null; 
} 

protected void onResume() { 
    super.onResume(); 
    getDateAndTime(); 
} 

答えて

5

私はRunnableを使用し、それをハンドラに遅れて投稿します。

public class ClockActivity extends Activity { 

    private SimpleDateFormat sdf = new SimpleDateFormat("hh:mm:ss"); 

    private TextView mClock; 
    private boolean mActive; 
    private final Handler mHandler; 

    private final Runnable mRunnable = new Runnable() { 
     public void run() { 
      if (mActive) { 
       if (mClock != null) { 
        mClock.setText(getTime()); 
       } 
       mHandler.postDelayed(mRunnable, 1000); 
      } 
     } 
    }; 

    public ClockActivity() { 
     mHandler = new Handler(); 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     mClock = (TextView) findViewById(R.id.clock_textview); 
     startClock(); 
    } 

    private String getTime() { 
     return sdf.format(new Date(System.currentTimeMillis())); 
    } 

    private void startClock() { 
     mActive = true; 
     mHandler.post(mRunnable); 
    } 
} 
1

を更新する代わりに、私はこの意図broadcastetのためにブロードキャストレシーバのリストを使用することをお勧めしますこれを処理するために、独自のタイマーを設計するために、このベストプラクティスをチェックアウトするには、すべてのminutを送りましたこれを行うためのサンプルコードのように私に教えてください。

+0

ACTION_TIME_TICK'は私が秒単位で更新することができます 'のようにそれはいないようです。その点で、放送受信機を使用すると、私はこれを行うRube Goldbergのように思えます。 – kibibyte

+1

真、 'ACTION_TIME_TICK'は分ごとに分単位で更新されます。しかし、日付と時刻を分単位で表示するようにテキストビューを更新したい場合は、必要なタスクを実行する必要があります。 – Dimse

関連する問題