android - 避免ViewPager快速滑动时执行AsyncTask

标签 android android-fragments android-asynctask android-viewpager jsoup

我正在使用 ViewPager 显示使用 jsoup 从网站获取的内容。 在每个页面的 onCreateView 中,我调用一个 AsyncTask 来获取数据并更新每个页面的 View

问题是,当用户滑动页面的速度比平常快时,AsyncTask 被调用了几次,因此,jsoup 发出了几个无用的请求,因为唯一有用的是最后一个。

我尝试在 Fragment 类上使用 setUserVisibleHint 并在 Activity 类中添加 setOnPageChangeListener 但这些方法使我失去了预加载下一页的 ViewPager 行为,我不想这样。

有没有办法知道用户什么时候停止滑动,只在那一刻调用AsynTask

public class ScreenSlidePageFragment extends Fragment {

    public static final String PAGE_NUMBER = "page";

    private int mProblemNumber;

    public static ScreenSlidePageFragment create(int pageNumber) {
        ScreenSlidePageFragment fragment = new ScreenSlidePageFragment();
        Bundle args = new Bundle();
        args.putInt(PAGE_NUMBER, pageNumber);
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mPageNumber = getArguments().getInt(PAGE_NUMBER);

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        ViewGroup rootView = (ViewGroup) inflater.inflate(
                R.layout.fragment_screen_slide_page, container, false);
        new GetPageTask(url).execute();

        return rootView;
    }
}

最佳答案

我认为最好的方法就是检查 AsyncTask 是否正在运行。存储对您的 AsyncTask 的引用,然后如果用户滚动回此页面,您可以使用 AsyncTask.Status ( http://developer.android.com/reference/android/os/AsyncTask.Status.html ) 检查其状态。

另外,如果你想避免在用户滚动太快时启动新任务,你可以使用handler.postDelayed(yourRunnable, longMs)。每次用户选择一个页面时,您都可以执行以下操作:

handler.removeCallbacks(yourRunnable);
handler.postDelayed(yourRunnable, longMs);

这样您将删除以前的待处理任务并在 longMs 时间内安排一个新任务。例如。如果您设置 1000 毫秒,那么您的任务只会在用户选择页面后的一秒钟内开始。

关于android - 避免ViewPager快速滑动时执行AsyncTask,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36187904/

相关文章:

android - FontRenderer 缓存已满

java - 安卓闹钟问题

android - 在操作栏中填充水平自定义 View

java - "<"和 ">"符号的问题

android - 登录后如何获取 fragment 的当前用户ID

java - Asynctask 输出 UI 线程

java - ViewPager 中 fragment 之间的转换工作缓慢

Android如何在 fragment 中显示DatePicker?

android - 当设备方向改变时 onCreate 方法不断被调用

android - Android应用程式当机。将JSON数据放入Listview