android等待、延时切换广告轮播 ScheduledExecutorService服务的使用

创建服务执行,在线程中等待执行相关操作:

protected void StartChangeAd() {
		// 当Activity不可见的时候停止切换
		if(scheduledExecutorService==null||scheduledExecutorService.isShutdown()){
			scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
			// 当Activity显示出来后,等待3秒,每3秒钟切换一次图片显示
			scheduledExecutorService.scheduleAtFixedRate(new ScrollTask(), 3, 3, TimeUnit.SECONDS);
		}
	}

子线程中执行切换任务

private class ScrollTask implements Runnable {

		public void run() {
			synchronized (main_ad_viewPager) {
				currentItem = (currentItem + 1) % imageViews.size();
				Message message=new Message();
				message.arg1=3;
				mainHandler.sendMessage(message); // 通过Handler切换图片
			}
		}

	}

由于子线程中不能做UI操作,通过Handler切换图片

Handler mainHandler = new Handler() {
			@Override
			public void handleMessage(Message msg) {
				super.handleMessage(msg);
				switch(msg.arg1){
					// 切换当前显示的图片
				case 3:
					main_ad_viewPager.setCurrentItem(currentItem);
					break;
				
				}
				
			}
		};

关于ScheduledExecutorService这个服务我的理解也不是很深,查找了一些相关资料。

在ExecutorService的基础上,ScheduledExecutorService提供了按时间安排执行任务的功能,它提供的方法主要有:
  • schedule(task,initDelay):安排所提交的Callable或Runnable任务在initDelay指定的时间后执行。
  • scheduleAtFixedRate():安排所提交的Runnable任务按指定的间隔重复执行
  • scheduleWithFixedDelay():安排所提交的Runnable任务在每次执行完后,等待delay所指定的时间后重复执行。
  • 注意我们可以用TimeUnit来制定时间单位,这也是Java5.0里新的特征,5.0以前的记时单位是微秒,现在可精确到奈秒。
关于TimeUnit的枚举常量
MICROSECONDS     微秒   一百万分之一秒(就是毫秒/1000)
MILLISECONDS     毫秒   千分之一秒    
NANOSECONDS    毫微秒  十亿分之一秒(就是微秒/1000)
SECONDS           秒
MINUTES      分钟
HOURS       小时
DAYS       天

其他相关方法可以查阅TimeUnit 的API。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值