Android fragment 和独立线程

标签 android multithreading android-fragments

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

这个类允许您基本上将一堆 View 或 fragment 拍打成一个组并轻松地翻阅它们。当我尝试创建一个单独的线程来随机随机播放 View 时,我的问题就出现了。

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

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

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

 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)

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

所以我的问题是:

是否可以按照以下方式注入(inject)一些东西

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

在我的主要 Activity 线程中而不中断它?

有什么更好的设计模式可以达到我想要的效果? (即以一致的指定间隔更改 View )

最佳答案

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

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

handler.postDelayed(changeView, timeout);

关于Android fragment 和独立线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10780128/

相关文章:

android - 处理改造 2 GSON 转换错误

php多线程,mysql

c++ - 为什么不同的CPU对执行相同的代码需要不同的时间

android - 在调用 onDestroy() 之后重用 Fragment 是否安全?

android - 获取空指针异常 - 使用接口(interface)将数据从适配器传递到子 fragment

java - Google Glass 的 Hello World 程序 - 一步一步

android - 编辑 MultiAutocompleteTextView 样式

Java 到 C 对象传递

python - 方法的 "self"参数是否受到某种保护?

android - 相机方向景观Android Zxing