timer常用的函数:
✓ public void schedule(TimerTask task, long delay, long period)
第1个参数必须是java.util.TimerTask 的子类,并实现 public void
run() 方法,因为 TimerTask 类实现了 Runnable 接口
从现在起过,delay毫秒以后,每隔period毫秒执行一次run()
方法
✓ schedule(TimerTask task, Date firstTime, long period)
从firstTime时刻开始,每隔period毫秒执行一次run() 方法
✓ public void schedule(TimerTask task, Date time)
在指定的time时刻执行run() 方法
✓ timer.schedule(TimerTask task, long delay);
从现在起过delay毫秒执行一次run() 方法
TimerTask常用的函数
✓ public abstract void run();执行时间间隔的代码
✓ public boolean cancel() ;关闭timer
✓ public long scheduledExecutionTime()
注意点
✓ TimerTask运行在一个单独的线程里,而不是UI线程。所以使用
Android timer时,注意android的单线程原则,确保线程安全。不要在
TimerTask的run方法中做UI相关的操作,如:TextView.setText()等,这
样可能会导致UI线程阻塞。如果需要可以使用handler向UI线程发消息,
具体处理由UI线程自己完成。
XML
<?xml version="1.0" encoding="utf-8"?>
<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"
tools:context=".MainActivity">
<TextView
android:id="@+id/time"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="时间" />
</LinearLayout>
MainActivity.java
package com.example.timer_clock;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import java.util.Timer;
import java.util.TimerTask;
public class MainActivity extends AppCompatActivity {
Timer timer;
TextView text;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
text = (TextView) findViewById(R.id.text);
timer = new Timer();//创建timer对象
timer.schedule(new TimerTask(){
public int flag=1;
@Override
public void run() {
Log.v("gyq","run()");
Message message = new Message();
message.what = 0;
message.obj = (flag++)+"aaaa";
mHandler.sendMessage(message);
}
}, 1000, 2000);//1000表示开始时1秒后发送一次,10*10000表示每2秒后发送一次
}
Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg){
Log.v("gyq","handleMessage()");
if (msg.what == 0) {
String str = (String) msg.obj;
Log.v("gyq","str="+str);
text.setText(text.getText()+str);//设置UI
}else{
text.setText("ccccc");
}
super.handleMessage(msg);
}
};
@Override
protected void onDestroy() {
super.onDestroy();
if (timer != null) {
timer.cancel();//关闭timer
}
}
}