您的位置:首页 > 移动开发 > Android开发

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

2014-07-09 10:34 501 查看
创建服务执行,在线程中等待执行相关操作:

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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: