如何使用异步任务来控制视图寻呼机

How to use async task to control a view pager

我正在尝试按照一些教程使用视图寻呼机创建一个自动图像滑块。我让一切正常,但后来我看到

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

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

所以搜索堆栈溢出问题,我看到很多开发人员建议使用 AsyncTask 在后台做一些事情然后更新,这实际上可能是一个完美的解决方案。但后来我意识到我对 AsyncTask 一无所知。我去了 android 开发人员参考并看到了一些教程,但我无法找到适合我的解决方案的内容。

我看了很多关于图片下载的教程,但是目前为止,不是我关心的。我只关心控制视图寻呼机移动到下一张幻灯片。

这里是我控制view pager滑动的部分:

// 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 教程。

您可以在下面找到两种方法,了解如何在 android 的 main/UI 线程上 运行 编写代码:

  1. 运行OnUIThread Activity的方法
runOnUiThread(new Runnable(){
     public void run() {
          // UI code goes here
     }
});
  1. 处理程序
Handler handler = new Handler(Looper.getMainLooper());
handler.post(new Runnable() {
     public void run() {
          // UI code goes here
     }
});

source

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);
}