Android中定时器的使用(Timer)
16lz
2021-01-26
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"?>
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 } }}
更多相关文章
- android自定义title的方法
- android view的setVisibility方法值的意思
- 自定义对话框的实现
- android:onClick="xxx"
- Android(安卓)AsyncLayoutInflater 源码解析
- mac下android真机调试,连接不上设备的解决方法
- Linux下android内核编译
- Android四大组件【摘抄】
- 线程 同步 ConditionVariable