做的是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:我指的无效,是这样测试出来的,拖动到一半,但是不松手,发现线程间隔到,马上就自动给我换下一张图了。
你调用的这个wait方法应该是用的Object方法的wait方法吧, 这个方法是java的native方法, 这个地方wait应该阻塞的是你当前调用线程