Android:检查进程是否已完成以启动其他进程

时间:2012-06-11 04:23:22

标签: java android android-viewpager viewpagerindicator

我遇到了由ViewPagerIndicator和runnable中的进程夸大的布局问题。 事情并非总是如此,但已经发生了几次。

MainActivity.java

protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mAdapter = new GtAdapter(getSupportFragmentManager());
        mPager = (ViewPager)findViewById(R.id.pager);
        mPager.setOffscreenPageLimit(5);
        mPager.setAdapter(mAdapter);
        mIndicator = (TabPageIndicator)findViewById(R.id.indicator);
        mIndicator.setViewPager(mPager);
        mIndicator.setCurrentItem(1);
        mIndicator.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {   
            public void onPageSelected(int position) {
            }
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            }
            public void onPageScrollStateChanged(int state) {
            }
        });
        int cod = mAdapter.getItemPosition(0);

        refreshPages();

    }   

在refreshPages()方法中,我有一个Runnable,它对ViewPagerIndicator膨胀的视图进行一些引用,这通常有效,但有时候(~20个工作 - 1个错误)我在引用中得到一些NullPointerException错误。

我在代码中放了一些日志标记,发现当错误发生时,refreshPages方法在启动膨胀过程之前发生。为什么会这样? 如何在膨胀过程完成后才启动refreshPages方法?感谢

1 个答案:

答案 0 :(得分:0)

@Daniel,

由于refreshPages具有或实现了Runnable,因此它的代码在不同的线程上运行。在线程执行时你没有控制权。它只是。这就是为什么有时你的代码不起作用的原因。一种快速方法是使用共享标志(线程之间)或使用信号量的更正确方式同步线程。现在,只需尝试使用标志,直到您了解如何同步。理解?

如前所述,您可以提供refreshPages()的代码供审阅。