我正在尝试按照一些教程使用视图分页器创建自动图像滑块。我一切正常,但后来我明白了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);
}