android 简易定时器
定時器
1.在android 應用開發當中,很多時候都要用到定時器,而要實現定時器更多的時候要用到兩個類:Timer,和TimerTask
2.API對Timer的解釋是:
?
簡單的翻譯一下:Timer用于在后臺進程中去執行一個任務,一個單獨的線程回來服務這個Timer...
所以Timer的使用的時候他的計時實在另外一個線程當中去執行的,如果你想定時去操作UI線程中UI,就要用到 Handler了。
3.API對TimerTask的解釋是:
Timer定時執行的任務就是由TimerTask來執行的。
4.在使用上面兩個類的時候可能遇到兩個問題:
1).當報這個錯的時候Timer is Cancel()是說明你把之前new 的Timer給Cancel() ,所以Timer 的Thread也給關閉了,想在用這個Timer就必須重新new一個,但在實際情況中很少會去執行Timer.cancel()的
2)當報TimerTask is scheduled already的時候說明你把 之前的的TimerTask有重新用了一遍,
一個TimerTask 通過schedule方法使用之后,不能通過schedule方法調用第二次,想重復使用是不行的,是一次性用品。
當你重新想利用這個timertask時,那么你只能重新獲得一個實例,最好是寫成類:
class MyTask extends TimerTask{@Overridepublic void run(){// TODO Auto-generated method stub//do something}};那么當你向再使用這個TimerTask時,你可以這么做:
task = new MyTask();timer.schedule(task, 1000);對于這種只使用一次的timer,可以在使用完成之后停止它,新建一個timer意味著新建一個線程,不用了就銷毀吧。
timer.cancel();timer.purge();timer= null;每一次使用的時候
timer= new Timer(); 當然你也可以讓這個timer一直存在
那么在重新new task之前,最好調用
5.下面給小例子:
MainActivity:
public class MainActivity extends Activity {private Button btn;private TextView tvShow;private int count = 10;Timer timer;MyTimeTask mTimeTask;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);timer = new Timer(true);tvShow = (TextView) findViewById(R.id.tv_show);btn = (Button) findViewById(R.id.btn);btn.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {mTimeTask = new MyTimeTask();timer.schedule(mTimeTask, 0, 1000);}});}Handler mHandler = new Handler() {public void handleMessage(Message msg) {tvShow.setText("" + count--);if (count <= 0) {timer.purge();mTimeTask.cancel();count = 10;btn.setEnabled(true);} else {btn.setEnabled(false);System.out.println("還剩" + count + "秒");}super.handleMessage(msg);};};private class MyTimeTask extends TimerTask {@Overridepublic void run() {Message message = mHandler.obtainMessage();message.what = 0;mHandler.sendMessage(message);}}
xml文件:activity_main
<LinearLayout 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:orientation="vertical"tools:context=".MainActivity" ><TextViewandroid:id="@+id/tv_show"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_horizontal"android:layout_marginTop="50dp"android:text="顯示時間"android:textSize="25sp" /><Buttonandroid:id="@+id/btn"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="10dp"android:text="計時開始" /></LinearLayout>運行的效果:
?
源碼下載?
轉載于:https://www.cnblogs.com/liangstudyhome/p/3940485.html
總結
以上是生活随笔為你收集整理的android 简易定时器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HDU 2128 Tempter of
- 下一篇: UVa - 12617 - How La