先理清概念:

Timer是一个执行任务的类,他接受TimerTask的参数;

Timer执行任务有两种方式,一种是在某个指定的时候执行某个任务timer.schedule(Timertask task,Data data),另一种是在多长时间之后执行某个任务timer.schedule(TimerTask task,long delay);

TimerTask中执行指定的任务,但由于Android是线程安全的,所有的界面的更新都必须放到主线程中,所以要使用到Handler对象。

Android的CPU分配的最小单元是线程,Handler一般是在某个线程里创建的,因而Handler和Thread就是相互绑定的,一一对应。 

而Runnable是一个接口,Thread是Runnable的子类。

下面是两种方法的例子

 

 1 package com.example.test007; 2  3 import java.util.Timer; 4 import java.util.TimerTask; 5  6 import android.app.Activity; 7 import android.os.Bundle; 8 import android.os.Handler; 9 import android.os.Message;10 import android.os.SystemClock;11 import android.widget.TextView;12 13 public class MainActivity extends Activity {14     15     private TextView tv;16     private int time=0;17     18     private final Timer timer=new Timer();19     Handler handler=new Handler(){20         @Override21         public void handleMessage(Message msg){22             ++time;23            if(msg.what == 1){24                 tv.setText("Handler,Timer以及TimeTask结合的方法:  "+ time);25             }26             super.handleMessage(msg);27         }28     };29     30     //初始化计时器任务31     TimerTask task =new TimerTask() {32         @Override33         public void run() {34             //由于主线程安全,页面的更新需放到主线程中35             Message msg =new Message();36             msg.what=1;37             handler.sendMessage(msg);38         }39     };40     @Override41     public void onCreate(Bundle savedInstanceState) {42         super.onCreate(savedInstanceState);43         setContentView(R.layout.activity_main);44         tv = (TextView) findViewById(R.id.tv1);45         //隔1s执行一次46         timer.schedule(task, 1000, 1000);47     }48 }

 

 1 package com.example.test007; 2  3 import android.app.Activity; 4 import android.os.Bundle; 5 import android.os.Handler; 6 import android.widget.TextView; 7  8 public class TimeActivity extends Activity { 9     private TextView tv;10     private int time=0;11     12     private Handler handler = new Handler();13     private Runnable runnable = new Runnable() {14         @Override15         public void run() {16             ++time;17             tv.setText("Handler的postDelayed(Runnable, long)方法 : "+ time);18             handler.postDelayed(this, 1000);19         }20     };21     @Override22     protected void onCreate(Bundle savedInstanceState) {23         super.onCreate(savedInstanceState);24         setContentView(R.layout.test);25         tv = (TextView) findViewById(R.id.tv);26         handler.postDelayed(runnable, 1000);27         28     }29 30 }

更多相关文章

  1. SpringBoot 2.0 中 HikariCP 数据库连接池原理解析
  2. android Activity runOnUiThread() 方法使用
  3. Android(java)学习笔记76:多线程-定时器概述和使用
  4. android中google“定位查询”编辑
  5. Android系统自带录屏(动态截屏)功能
  6. Android(安卓)AsyncTask源码解析
  7. Android实时监控项目第四篇:后台线程发送预览帧视频数据
  8. Android(安卓)应用软件开发(十)Handler使用
  9. Android(安卓)IPC机制(三)使用AIDL实现

随机推荐

  1. Android(安卓)8.0 SystemUI(一)
  2. android 自动化测试方法
  3. Android打开不同类型文件
  4. Android(安卓)开发必备AS插件,写下来,方便
  5. 调整android输出分辨率,适配更大分辨率的
  6. android的互联网开发 上
  7. Android的用GreenDao操作数据库
  8. Android中关于数据库SQLite的insert插入
  9. Android(安卓)异步获取网络图片Bitmap资
  10. GitHub 上受欢迎的 Android(安卓)UI Libr