设置一个延时时间(1000),以一定的频率(3000)来执行某项任务。
1.Thread+sleep 最常见操作
new Thread() {
@Override
public void run() {
super.run();
//休眠3秒
Thread.sleep(3000);
//要执行的操作
}
}.start();
2.TimerTask + Timer 定时器+定时任务
public void start(View view) {
// 创建任务
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
//操作逻辑写此处
}
};
//创建定时器
timer = new Timer();
//参数说明:task 任务, delay延时, period间隔
timer.scheduleAtFixedRate(timerTask, 1000, 3000);
//备用:timer.schedule(timerTask , 3000);
}
public void cancle(View view) {
timer.cancel();
timer=null;
}
3.synchronized 让当前线程等待延时 时长
synchronized (Thread.currentThread()) {
try {
Thread.currentThread().wait(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
1.Handler的postDelayed方法
//3秒后执行Runnable中的run方法
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
//要执行的操作
}
}, 3000);
2.countDownTimer
countDownTimer = new CountDownTimer(3000, 1000){
@Override
public void onTick(long millisUntilFinished) {
//倒计时中可通过此方式获取当前的秒数:millisUntilFinished/1000 + "秒"
}
@Override
public void onFinish() {
//倒计时完毕之后的处理逻辑
}
};
countDownTimer.start();
1.handler定时
关键 是一个思路。发一个延时消息后。在处理该消息完成,接着给自己发延时消息。
private Handler handler=new Handler(){
public void handleMessage(android.os.Message msg) {
System.out.println("---清理进程");
handler.removeMessages(msg.what);
//再发送消息
Message message = new Message();
message.what=1;
handler.sendMessageDelayed(message, 2000);
};
};
public void start(View view) {
Message message = new Message();
message.what=1;
handler.sendMessageDelayed(message, 1000);
}
public void cancle(View view) {
//删除消息与处理方法
handler.removeCallbacksAndMessages(null);
}
2.定时器(线程池) 新闻客户端
public void start(View view) {
//同时加载 多张图片 管理线程
// 创建 线程池
ScheduledExecutorService ses = Executors.newSingleThreadScheduledExecutor();
// 定时执行
// ses.scheduleAtFixedRate(command,一段代码 initialDelay,等待 period,间隔
// unit时间单位);
Runnable runnable = new Runnable() {
@Override
public void run() {
System.out.println("定时代码");
}
};
scheduleAtFixedRate = ses.scheduleAtFixedRate(runnable, 1, 2, TimeUnit.SECONDS);
}
public void cancle(View view) {
scheduleAtFixedRate.cancel(true);
}
3.全局定时服务 AlarmManager
a.由系统创建的服务 开销小b.执行一个操作 使用PendingIntentc.要求写一个广播接收者处理 定时任务
public void start(View view) {
// 使用一个已存在的级别的定时器
// 获取定时服务
am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
// 设定时间
// am.setRepeating(AlarmManager.RTC, triggerAtMillis 等待时间 intervalMillis
// 间隔, operation 操作)
// 创建一个广播
Intent intent = new Intent();
intent.setAction("com.ithiema.repeat");// 发送信息 要求广播接收者执行 定时任务
// 创建一个将来的意图
broadcast = PendingIntent.getBroadcast(this, 0, intent, 0);
//ELAPSED流失 以手机开机时间点为0
//RTC :以 UTC 1970
am.setRepeating(AlarmManager.RTC, System.currentTimeMillis()+10, 2000, broadcast);
}
public void cancle(View view) {
am.cancel(broadcast);
}
处理事件
public class CommondReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
System.out.println("---定时操作");
}
}
清理工具
重用率比较高的代码要求进行抽取
public class ProcessUtils {
/**
*方法 清理
*@param context
*/
public static void clearAllProcess(Context context)
{
// 获取进程管理者
ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
// 运行的进程
List runningAppProcesses = am.getRunningAppProcesses();
for (RunningAppProcessInfo item : runningAppProcesses) {
if (!TextUtils.equals(item.processName,context. getPackageName())) {
// 逐个关闭进程
am.killBackgroundProcesses(item.processName);
}
}
}
}