android的activity的有四种启动方式:
1. standard这种方式是默认的,不用设置,比如当我们A intent B时,再从B Intent A,那么Task栈空间为A B A;就是不会管是否存在
2.singleTop
如果在Task栈正好有activity的实例,就会重用该实例,不然还是重建一个
比如 A B C D,如果D intent D,那么D不会重复
但是如果 D intent C,那么Task空间变成
A B C D C
3.singleTask
这个方法模式是这样的,如果在Task中已经存在这个activity的实例的话,那么就不会新建了,直接将这个activity调入栈顶部。
比如 当前activity的栈是 A B C D,由D来intent B,那么,C D都会被弹出 栈,只剩下 A B
4.singleInstance
在一个新栈中创建该Activity实例,并让多个应用共享改栈中的该Activity实例。一旦改模式的Activity的实例存在于某个栈中,任何应用再激活改Activity时都会重用该栈中的实例,其效果相当于多个应用程序共享一个应用,不管谁激活该Activity都会进入同一个应用中。
这个模式很少用到。
现在我们来说说Tab如何在去在activity中切换,大家都用过新浪微博吧?新浪微博的你发了一条微博,下面的Tab的为什么会自动切换呢?你说,简单啊,从发消息的界面直接Intent过去就可以了,好吧,那你退出了怎么办?就会有两个activity一样的吧。
所以我们需要设置Tab的启动模式为singleTask,这样就不会出现重复的了。但是,又会出现一个问题就是,Tabactivi中如何知道我要显示哪页呢?你说用Intent就好了是吧?
我想说,在singleTask这种模式下,Tabactivity就是不行,不能Intent的参数,这个问题我也不知道,我认为是andoird的api的中的某种限制导致的,其他的singleTask都可以
那么我们如何解决这个问题呢。
这就要说到activity的生命周期,所以说这个很重要啦
关于activity的具体生命周期,可以见这个连接:http://blog.csdn.net/liuhe688/article/details/6733407
我这里主要说下,当我们实现Intent跳转的时候,就要这样做,
覆写Tab的onResume()方法:
protected void onResume() //singleTask 模式每次调用还是会启动这个resmue方法,作为重新部署的结果 { super.onResume(); this.show_prepare_page(this.get_which_page_intent()); }然后呢,其实我们可以写个一个静态的变量,作为公共使用,每次在onResume()判定下这个公有变量的值就好了这样就是实现了Tab的自动转页的技术了
然后说下,如果用了moveTasktoBack,那么,之前的那个activity,就是跳转之前不用finish了,因为一旦你finish这个方法了,每次都会移到后台去进行了。
说下在activity在tab的中的生命周期:
当我们用tab去切换的时候,这个activity是走onPause状态,不会走到onStop状态哈。
只有当我们在这个activity中去Intent占满全屏的activity,时候,这个activity才会经历onpause-》onstop-》onrestart()->onstart()
当我们用上述的方法那个去实现自动跳转页面的时候,原来的那个activity会经过onpause-》onresume()两个周期,我也不知道为什么回事这样的。
用上述那个方法,tab每次也是走onpause-》onresmue()路线的