您的位置:首页 > 移动开发 > Android开发

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

2014-11-23 21:14 441 查看
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()路线的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android开发
相关文章推荐