在Android日常开发中我们经常会有延时执行某个操作的需求,例如我们启动应用的时候,开始呈现一个引导页面,过了两三秒后,自动跳转到主界面;又如为了控制时序,需要延时执行等等。
下面整理下实现延时执行操作的几种方法:
① 使用Handler的postDelayed方法实现延时操作
推荐使用这种方式
Handler handler = new Handler();handler.postDelayed(new Runnable() { @Override public void run() { }}, 3000);//3秒后执行Runnable中的run方法
new Handler().postDelayed(new Runnable() {public void run() {//要执行的任务}}, 3000);
final int MSG_WHAT = 1; Handler handler = new Handler() { @Override public void handleMessage(Message message) { switch(message.what) { case MSG_WHAT: // 更新UI break; } } }; // 延时3s执行MSG_WHAT handler.sendEmptyMessageDelayed(MSG_WHAT, 3000);
② 使用线程的休眠实现延时操作
new Thread() { @Override public void run() { super.run(); Thread.sleep(3000);//休眠3秒 }}.start();
③ 使用Timer定时器
TimerTask task = new TimerTask() { @Override public void run() { // 要执行的操作 } }; Timer timer = new Timer(); timer.schedule(task, 3000); // 延时3s 执行TimeTask的run方法 timer.schedule(task,3000,5000);//3秒后每隔5秒执行一次 timer.cancel();//销毁
④ AlarmManager.setRepeating()
适合需要一直在后台运行的定时任务,比如每隔5分钟就做一件事。
public class AlarmService extends Service { private static final int INTERVAL = 1 * 60 * 60 * 1000;//1小时 private static final int PENDING_REQUEST = 0; @Override public int onStartCommand(Intent intent, int flags, int startId) { //通过AlarmManager定时启动广播 AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); long triggerAtTime = SystemClock.elapsedRealtime() + INTERVAL;//从开机到现在的毫秒(手机睡眠(sleep)的时间也包括在内 Intent i = new Intent(this, AlarmReceive.class); PendingIntent pIntent = PendingIntent.getBroadcast(this, PENDING_REQUEST, i, PENDING_REQUEST); alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, triggerAtTime, pIntent); return super.onStartCommand(intent, flags, startId); }}
public class AlarmReceive extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Intent i = new Intent(context, AlarmService.class); context.startService(i); }}
来源地址:https://blog.csdn.net/daokedream/article/details/129625259