Android片段和单独的线程

ebo*_*yen 6 multithreading android android-fragments

我正在使用android 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
Run Code Online (Sandbox Code Playgroud)

我想我需要做的就是从我的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)
Run Code Online (Sandbox Code Playgroud)

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

所以我的问题是:

是否有可能注入一些东西

run() { while(condition) { methodIWantHere(); sleep(timeout); } }
Run Code Online (Sandbox Code Playgroud)

在我的主要活动的线程中没有破坏它?

要么

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

Raj*_*esh 14

A Handler是一个明显的选择.

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

handler.postDelayed(changeView, timeout);
Run Code Online (Sandbox Code Playgroud)


San*_*kar 8

尝试通过使用执行您的代码

runOnUiThread(Runnable action). 
Run Code Online (Sandbox Code Playgroud)