Thread、Runable和Timer、TimerTask简述
16lz
2021-01-26
先理清概念:
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 }
更多相关文章
- SpringBoot 2.0 中 HikariCP 数据库连接池原理解析
- android Activity runOnUiThread() 方法使用
- Android(java)学习笔记76:多线程-定时器概述和使用
- android中google“定位查询”编辑
- Android系统自带录屏(动态截屏)功能
- Android(安卓)AsyncTask源码解析
- Android实时监控项目第四篇:后台线程发送预览帧视频数据
- Android(安卓)应用软件开发(十)Handler使用
- Android(安卓)IPC机制(三)使用AIDL实现