【问题标题】:Android Fragments and Separate ThreadsAndroid 片段和单独的线程
【发布时间】:2012-05-28 06:18:40
【问题描述】:

我正在使用安卓 ViewPager:http://developer.android.com/reference/android/support/v4/view/ViewPager.html

这个类让你基本上可以将一堆视图或片段组合成一个组并轻松地翻阅它们。当我尝试创建一个单独的线程来随机打乱视图时,就会出现我的问题。

我扩展了一个线程,该线程将在我通过参数传入的 ViewPager 上调用 setCurrentItem。当我这样做时,我收到了这个:

java.lang.IllegalStateException: Must be called from main thread of process

我想我要做的就是从我的 activityfragment 中调用一个方法来解决这个问题,所以我创建了 changePageFromActivity 来完成肮脏的工作,并通过将我的活动传递给我的线程来调用它。但这也没有用。以下是完整的堆栈跟踪:

 FATAL EXCEPTION: Thread-11
 java.lang.IllegalStateException: Must be called from main thread of process
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1392)
at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:431)
at android.support.v4.app.FragmentStatePagerAdapter.finishUpdate(FragmentStatePagerAdapter.java:160)
at android.support.v4.view.ViewPager.populate(ViewPager.java:804)
at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:433)
at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:405)
at android.support.v4.view.ViewPager.setCurrentItem(ViewPager.java:397)
at com.lyansoft.music_visualizer.MusicVisualizerActivity.changePageFromActivity(MusicVisualizerActivity.java:144)
at com.lyansoft.music_visualizer.ShuffleThread.run(ShuffleThread.java:38)

在做了一些研究之后,我收集到片段很容易被破坏并导致不同的线程,因此为了防止出现任何问题,ViewPager 只是确保必须从主活动中调用我想要的方法。

所以我的问题是:

是否可以注入类似的东西

run() { while(condition) { methodIWantHere(); sleep(timeout); } }

在我的主要活动的线程中而不打断它?

什么是更好的设计模式来实现我想要的效果? (即以一致的指定间隔更改视图)

【问题讨论】:

    标签: android multithreading android-fragments


    【解决方案1】:

    Handler 是一个显而易见的选择。

    final Runnable changeView = new Runnable()
    {
        public void run() 
        {
            methodIWantHere();
            handler.postDelayed(this, timeout);
        }
    };
    
    handler.postDelayed(changeView, timeout);
    

    【讨论】:

    • 这正是我想要的!谢谢!
    【解决方案2】:

    尝试使用

    来执行你的代码
    runOnUiThread(Runnable action). 
    

    【讨论】:

    • 谢谢,不知道我是怎么错过的。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-15
    • 1970-01-01
    • 1970-01-01
    • 2016-03-31
    • 2012-01-03
    相关资源
    最近更新 更多