runOnUiThread和滞后

时间:2012-10-12 14:10:23

标签: android multithreading

我有一个片段,它将ViewPager与自定义视图和顶部栏中的微调器相结合。每次更改viewpager中的页面时,我都必须从db中更新微调器中的字符串。为此,在viewPager监听器的onPageSelected中,我启动了一个从db检索数据的线程,并通过runOnUiThread spinner的适配器进行更新。问题是为spinner的适配器调用的notifyDataSetChanged()落后于viewpager:它必须重建几个视图,但它有点滞后。

            @Override
        public void onPageSelected(final int pos) {
            new Thread(new Runnable() {
                @Override
                public void run() {

...

                    getActivity().runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            mSpinnerAdapter.notifyDataSetChanged();
                        }
                    });
                }
            }).start();
        }

如何解决这个问题?可以在主线程上以最低优先级运行代码吗?

2 个答案:

答案 0 :(得分:0)

首先,删除Thread,然后尝试删除runOnUiThread。

答案 1 :(得分:0)

你应该能够逃脱:

       @Override
    public void onPageSelected(final int pos) {
        ... // your hidden code
        getActivity().runOnUiThread(new Runnable() {
            @Override
            public void run() {
                mSpinnerAdapter.notifyDataSetChanged();
            }
        });
    }

不需要新的线程。