我有一个包含ViewPager
的activity
。ViewPager的Adapter
是FragmentStatePagerAdapter
。每个页面都是Fragment
。Fragment
包含多个线程。我的问题是,当ViewPager's
页面更改时,我必须停止片段内的所有线程。我该怎么做?
您已经询问了使用接口实现的活动和片段之间的通信
您的片段:
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
}
}
希望它能有所帮助。
Android的应用程序哲学是杀死进程,所以也许遵循同样的想法,你可以杀死线程。但是要注意,如果线程拥有锁或监视器,这可能会导致死锁。
对我来说,一种更严肃的方法似乎是使用"活动"中的Thread.interrupt()。然后你的片段中的线程必须检查Thread.interrupt是否有中断,如果它们被中断了,就优雅地完成。
如果您想要一些同步行为,可以使用Thread.join()
此外,您可以等待一定的时间,让线程使用计时器优雅地完成,然后在超时时杀死它们
请查看java.lang.Thread
为了使其更容易实现,可以使用ThreadPoolExecutor或java.util.concurrent包的其他帮助程序。