在Android UI线程中执行定时任务的方法

         在项目中,我们经常会碰见执行定时任务的情况,比如下面这个场景:在2秒内连续点击两次返回键,应用就退出。这个功能实现的思路大体这样:定义一个类变量goback,记录点击的次数,如果2秒内点击了2次就finish,如果没有,goback就被重置为0,其中一种实现方法如下(1.0):

<span style="white-space:pre">	</span>new Handler().postDelayed(new Runnable() {
			@Override
			public void run() {
				goback = 0;
			}
		}, 2000);
接下来,我再探讨一下其他实现上面功能的方法:

1.1使用 ScheduledExecutorService

private static final ScheduledExecutorService worker = 
  Executors.newSingleThreadScheduledExecutor();

  Runnable task = new Runnable() {
    public void run() {
      /* Do something… */
    }

  worker.schedule(task, 2, TimeUnit.SECONDS);


1.2 使用Timer类

new Timer().schedule(new TimerTask() {          
    @Override
    public void run() {
        // this code will be executed after 2 seconds       
    }
}, 2000);

1.3还是使用handler,不过增加了message的发送

Handler myHandler = new DoSomething();
Message m = new Message();
m.obj = c;//passing a parameter here
myHandler.sendMessageDelayed(m, 1000);

class DoSomething extends Handler {
        @Override
        public void handleMessage(Message msg) {
          MyObject o = (MyObject) msg.obj;
          //do something here
        }
    }

1.4最后一种使用Thread类,有点繁琐,不建议用

private static long SLEEP_TIME = 2 // for 2 second
.
.
MyLauncher launcher = new MyLauncher();
            launcher.start();
.
.
private class MyLauncher extends Thread {
        @Override
        /**
         * Sleep for 2 seconds as you can also change SLEEP_TIME 2 to any. 
         */
        public void run() {
            try {
                // Sleeping
                Thread.sleep(SLEEP_TIME * 1000);
            } catch (Exception e) {
                Log.e(TAG, e.getMessage());
            }
            //do something you want to do
           //And your code will be executed after 2 second
        }
    }

差不多就是以上五种做法,各有各的适用场景,代码比较简单,不多说,直接拿过去用就行。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值