Android countdown CountDownTimer note, android countdown
Easy countdown for Android: CountDownTimer
CountDownTimer provided by the system
When I checked the information, I found the CountDownTimer class and decisively abandoned the previous countdown practice.
Function:
30 seconds countdown interval: 1 second
Parameters:
Mc. start (); Method start
Mc. cancel (); Method end
New MyCountDownTimer (30000,100 0); the first parameter indicates that the total time is 30000 milliseconds, with an interval of 1000 milliseconds
Directly run the Code:
Package com. example. daojishi; import android. app. activity; import android. OS. bundle; import android. OS. countDownTimer; import android. util. log; import android. view. view; import android. widget. textView; import android. widget. toast;/***** @ author baozi ** countdown class CountDownTimer **/public class MainActivity extends Activity {private MyCountDownTimer mc; private TextView TV; @ Overrideprotected void onCreate (Bu Ndle savedInstanceState) {super. onCreate (savedInstanceState); setContentView (R. layout. activity_main); TV = (TextView) findViewById (R. id. show); mc = new MyCountDownTimer (30000,100 0); mc. start ();} public void oncancel (View view) {Toast. makeText (MainActivity. this, "cancel", Toast. LENGTH_LONG ). show (); // toast has a display time delay mc. cancel ();} public void restart (View view) {Toast. makeText (MainActivity. this, "Start again", Toast. LE NGTH_LONG ). show (); // toast has a display time delay mc. start ();}/*** inherits CountDownTimer prevention ** override the methods onTick () and onFinish () of the parent class () */class MyCountDownTimer extends CountDownTimer {/***** @ param millisInFuture * indicates the total number of Countdown times in milliseconds. ** for example, millisInFuture = 1000 indicates 1 second. ** @ param countDownInterval * indicates interval: How many microseconds does one onTick method call? ** example: countDownInterval = 1000; indicates that onTick () **/public MyCountDownTimer (long millisInFuture, lo Ng countDownInterval) {super (millisInFuture, countDownInterval) ;}@ Overridepublic void onFinish () {TV. setText ("done") ;}@ Overridepublic void onTick (long millisUntilFinished) {Log. I ("MainActivity", millisUntilFinished + ""); TV. setText ("Countdown (" + millisUntilFinished/1000 + ")... ");}}} // please wait until then // zookeeper // zookeeper without any bugs! // Zookeeper has been completed before // zookeeper has been executed before being executed ┛ ┗ ┻ ┛
Layout:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <TextView android:id="@+id/show" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" /> <Button android:id="@+id/button1" android:onClick="oncancel" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/show" android:layout_below="@+id/show" android:layout_marginLeft="50dp" android:layout_marginTop="106dp" android:text="cancel" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/button1" android:layout_below="@+id/button1" android:layout_marginTop="63dp" android:onClick="restart" android:text="restart" /></RelativeLayout>
Appendix:
CountDownTimer source code:
/* * Copyright (C) 2008 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */package android.os;import android.util.Log;/** * Schedule a countdown until a time in the future, with * regular notifications on intervals along the way. * * Example of showing a 30 second countdown in a text field: * * <pre class="prettyprint"> * new CountDownTimer(30000, 1000) { * * public void onTick(long millisUntilFinished) { * mTextField.setText("seconds remaining: " + millisUntilFinished / 1000); * } * * public void onFinish() { * mTextField.setText("done!"); * } * }.start(); * </pre> * * The calls to {@link #onTick(long)} are synchronized to this object so that * one call to {@link #onTick(long)} won't ever occur before the previous * callback is complete. This is only relevant when the implementation of * {@link #onTick(long)} takes an amount of time to execute that is significant * compared to the countdown interval. */public abstract class CountDownTimer { /** * Millis since epoch when alarm should stop. */ private final long mMillisInFuture; /** * The interval in millis that the user receives callbacks */ private final long mCountdownInterval; private long mStopTimeInFuture; /** * @param millisInFuture The number of millis in the future from the call * to {@link #start()} until the countdown is done and {@link #onFinish()} * is called. * @param countDownInterval The interval along the way to receive * {@link #onTick(long)} callbacks. */ public CountDownTimer(long millisInFuture, long countDownInterval) { mMillisInFuture = millisInFuture; mCountdownInterval = countDownInterval; } /** * Cancel the countdown. */ public final void cancel() { mHandler.removeMessages(MSG); } /** * Start the countdown. */ public synchronized final CountDownTimer start() { if (mMillisInFuture <= 0) { onFinish(); return this; } mStopTimeInFuture = SystemClock.elapsedRealtime() + mMillisInFuture; mHandler.sendMessage(mHandler.obtainMessage(MSG)); return this; } /** * Callback fired on regular interval. * @param millisUntilFinished The amount of time until finished. */ public abstract void onTick(long millisUntilFinished); /** * Callback fired when the time is up. */ public abstract void onFinish(); private static final int MSG = 1; // handles counting down private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { synchronized (CountDownTimer.this) { final long millisLeft = mStopTimeInFuture - SystemClock.elapsedRealtime(); if (millisLeft <= 0) { onFinish(); } else if (millisLeft < mCountdownInterval) { // no tick, just delay until done sendMessageDelayed(obtainMessage(MSG), millisLeft); } else { long lastTickStart = SystemClock.elapsedRealtime(); onTick(millisLeft); // take into account user's onTick taking time to execute long delay = lastTickStart + mCountdownInterval - SystemClock.elapsedRealtime(); // special case: user's onTick took more than interval to // complete, skip to next interval while (delay < 0) delay += mCountdownInterval; sendMessageDelayed(obtainMessage(MSG), delay); } } } };}
Daily improvement step forward
Can android use service and CountDownTimer to implement an inverted timer?
Use handler to implement service and live ui thread Communication
On Android, I developed a small countdown software for several days and made it a service? Or is it possible to make an Activity that can be retained in the background?
Depends on your function
If you do not need to always check the countdown in the middle, you can call the calendar for a few days, accurate to the day (or hour minutes), and receive a reminder to start the service. Start what you want to start by the service.
If you want to check and adjust the countdown halfway, you can only use the service. Add some attributes to make it last forever. If the server is shut down, write the time to the file or preference, start the instance, and run the timer again. Only some cleaner software can kill the service.
Activity is mainly used to display pages. Unlike services, android systems like to automatically recycle such objects. If you want it to last forever, you can set attributes to make it exist for a long time. But it is not recommended.
There is also a type of hard clock for android, which can still be timed off and run some programs. You can google it.