【发布时间】: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