做的是android的轮播广告图片,代码是网上找的,貌似也很清晰逻辑,目的是想在用户手动滑动的时候,挂起线程,但是貌似wait无效。。。
第一部分代码随便看一下。。。。
/**
* 利用线程池定时执行动画轮播
*/
@Override
protected void onStart() {
// TODO Auto-generated method stub
super.onStart();
scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
scheduledExecutorService.scheduleWithFixedDelay(
new ViewPageTask(),
3,
3,
TimeUnit.SECONDS);
}
/**
* 图片轮播任务
*
* @author liuyazhuang
*/
private class ViewPageTask implements Runnable {
@Override
public void run() {
synchronized (this) {
currentItem = (currentItem + 1) % titles.size();
mHandler.sendEmptyMessage(0);
}
}
}
/**
* 接收子线程传递过来的数据
*/
private Handler mHandler = new Handler() {
public void handleMessage(android.os.Message msg) {
mViewPaper.setCurrentItem(currentItem);
}
};
上面的逻辑应该没什么大问题,亮点是这里。。。
mViewPaper.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrollStateChanged(int arg0) {
try {
switch (arg0) {
case ViewPager.SCROLL_STATE_DRAGGING:
scheduledExecutorService.wait();
break;
case ViewPager.SCROLL_STATE_SETTLING:
scheduledExecutorService.notifyAll();
break;
}
} catch (Exception e) {
e.printStackTrace();
}
}
});
这个wait无效。。。。断点是进入的,改成shutdown也有效。。就是wait无效。。。什么鬼。。。
PS:我指的无效,是这样测试出来的,拖动到一半,但是不松手,发现线程间隔到,马上就自动给我换下一张图了。
The wait method you call should be the wait method of the Object method. This method is a native method of java. Here, wait should block your current calling thread