活动和片段之间的Android通信

时间:2013-09-03 12:52:01

标签: android android-fragments android-viewpager

我有activity,其中包含ViewPager。ViewPager的AdapterFragmentStatePagerAdapter。每个页面都是FragmentFragment包含许多线程。我的问题是,当ViewPager's页面发生变化时,我必须停止片段内的所有线程。我该怎么做?

2 个答案:

答案 0 :(得分:9)

您已经询问过使用界面实现的活动和片段之间的通信:

你的片段:

public class YourFragment
    extends Fragment{

private OnListener listener;

 public interface OnListener
    {
        void onChange();
    }

void initialize( OnListener listener)
{

        this.listener = listener;
}


//onview pager change call your interface method that will go to the activity as it has the listener for interface. 

listener.onChange();
}

您的活动:

public class yourActivity
    extends Activity
    implements yourFragment.OnListener
{

// intialize the method of fragment to set listener for interface where you define fragment.
yourFragment.initialize( this );

// implement what you want to do in interface method.

@Override
    public void onChange()
    {
     // implement what you want to do 
     }
}
希望它会有所帮助。

答案 1 :(得分:1)

Android的应用程序理念是杀死进程,所以也许遵循相同的想法就可以杀死你的线程。请注意,如果您的线程拥有锁或监视器,这可能会导致死锁。

对我来说更严肃的方法似乎是从你的Activity中使用Thread.interrupt()。然后你的片段中的线程必须检查Thread.interrupted是否中断,如果它们被中断则优雅地完成。
如果需要某些同步行为,可以使用Thread.join()
此外,您可以等待一段时间让线程使用计时器正常完成,然后在超时时终止它们。

请看java.lang.Thread


为了更容易实现,您可以使用ThreadPoolExecutor或java.util.concurrent包的其他帮助程序。