如何使用异步任务来控制视图寻呼机
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 线程上 运行 编写代码:
- 运行OnUIThread Activity的方法
runOnUiThread(new Runnable(){
public void run() {
// UI code goes here
}
});
- 处理程序
Handler handler = new Handler(Looper.getMainLooper());
handler.post(new Runnable() {
public void run() {
// UI code goes here
}
});
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);
}
我正在尝试按照一些教程使用视图寻呼机创建一个自动图像滑块。我让一切正常,但后来我看到
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 线程上 运行 编写代码:
- 运行OnUIThread Activity的方法
runOnUiThread(new Runnable(){
public void run() {
// UI code goes here
}
});
- 处理程序
Handler handler = new Handler(Looper.getMainLooper());
handler.post(new Runnable() {
public void run() {
// UI code goes here
}
});
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);
}