【Android】之【延时执行的几种方法】

在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;

    /**
     * 调用Service都会执行到该方法
     */
    @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);
    }
}
  • 7
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Crazy程序猿2020

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值