我正在尝试按照一些教程使用视图分页器创建自动图像滑块。我一切正常,但后来我明白了

Choreographer: Skipped 1 frames! The application may be doing too much work on its main thread.并搜索错误。

您会看到,在我的代码中,我有一个计时器和一个处理程序,它们只是将代码延迟3秒钟,然后将视图分页器滑动到下一张图像。我与一个朋友确认,经过数小时的搜索,没有其他事情在主线程上做太多的工作了。

因此,在堆栈溢出中搜索有关该问题的信息,我发现许多开发人员建议使用AsyncTask在后台执行一些操作然后进行更新,这实际上可能是一个完美的解决方案。但是后来我意识到我对AsyncTask一无所知。我去了android开发人员参考,看到了一些教程,但是我找不到适合我的解决方案的东西。

我看到了很多有关图像下载的教程,但是到目前为止,它们并不是我所关心的。我只关心控制视图分页器移动到下一张幻灯片。

这是我控制视图分页器滑动的部分:

// Auto start of viewpager
        final Handler handler = new Handler();
        final Runnable Update = new Runnable() {
            public void run() {
                if (currentPage == NUM_PAGES) {
                    currentPage = 0;
                }
                mPager.setCurrentItem(currentPage++, true);
            }
        };
        Timer swipeTimer = new Timer();
        swipeTimer.schedule(new TimerTask() {
            @Override
            public void run() {
                handler.post(Update);
            }
        }, 3000, 3000);


如何将此代码合并到AsyncTask中?

作为参考,我使用了this教程。

最佳答案

Runnable是一个单独的工作线程,它与主线程没有交互。在处理ui元素时,请使用runOnUiThread。例。

     runOnUiThread(new Runnable() {
            @Override
            public void run() {
                if (currentPage == NUM_PAGES) {
                    currentPage = 0;
                }
                mPager.setCurrentItem(currentPage++, true);
            }
        });

要么
runOnUiThread(){
 mPager.setCurrentItem(currentPage++, true);
}

10-07 19:40
查看更多