Run loop every second java

后端 未结 5 1455
你的背包
你的背包 2020-12-29 14:54
int delay = 1000; // delay for 1 sec. 
int period = 10000; // repeat every 10 sec. 
Timer timer = new Timer(); 
timer.scheduleAtFixedRate(new TimerTask() 
    { 
            


        
5条回答
  •  别那么骄傲
    2020-12-29 15:26

    I came across this thread when i tried to get around the problem that you can't hide seconds in DigitalClock widget for Android. DigitalClock is deprecated now and the recommended widget to use now is TextClock. That don't work on old APIs tho... Therefore i had to write my own 24 hour clock. I don't know if this is a good implementation but it seems to work (and it is updated every second):

        import java.util.Calendar;
    
        import android.os.Handler;
        import android.view.View;
        import android.widget.TextView;
    
    
        /**
         * A 24 hour digital clock represented by a TextView
         * that can be updated each second. Reads the current
         * wall clock time.
         */
        public class DigitalClock24h {
    
                private TextView mClockTextView; // The textview representing the 24h clock
                private boolean mShouldRun = false; // If the Runnable should keep on running
    
                private final Handler mHandler = new Handler();
    
                // This runnable will schedule itself to run at 1 second intervals
                // if mShouldRun is set true.
                private final Runnable mUpdateClock = new Runnable() {
                        public void run() {
                                if(mShouldRun) {
                                        updateClockDisplay(); // Call the method to actually update the clock
                                        mHandler.postDelayed(mUpdateClock, 1000); // 1 second
                                }
                        }
                };
    
    
                /**
                 * Creates a 24h Digital Clock given a TextView.
                 * @param clockTextView
                 */
                public DigitalClock24h(View clockTextView) {
                        mClockTextView = (TextView) clockTextView;
                }
    
                /**
                 * Start updating the clock every second.
                 * Don't forget to call stopUpdater() when you
                 * don't need to update the clock anymore.
                 */
                public void startUpdater() {
                        mShouldRun = true;
                        mHandler.post(mUpdateClock);
                }
    
                /**
                 * Stop updating the clock.
                 */
                public void stopUpdater() {
                        mShouldRun = false;
                }
    
    
                /**
                 * Update the textview associated with this
                 * digital clock.
                 */
                private void updateClockDisplay() {
    
                        Calendar c = Calendar.getInstance();
                        int hour = c.get(Calendar.HOUR_OF_DAY); // 24 hour
                        int min = c.get(Calendar.MINUTE); 
    
                        String sHour;
                        String sMin;
    
                        if(hour < 10) {
                                sHour = "0" + hour;
                        } else sHour = "" + hour;
    
                        if(min < 10) {
                                sMin = "0" + min;
                        } else sMin = "" + min;
    
                        mClockTextView.setText(sHour + ":" + sMin);
                }
    
        }
    

    Thankyou biegleux for pointing me in the, i suppose, correct direction!

提交回复
热议问题