关于activity的启动模式问题,生命周期和TabActivity是如何做到视图切换的

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()路线的






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值