关于activity的启动模式问题,生命周期和TabActivity是如何做到视图切换的
2014-11-23 21:14
441 查看
android的activity的有四种启动方式:
这种方式是默认的,不用设置,比如当我们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
这个模式很少用到。
现在我们来说说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()方法:
然后说下,如果用了moveTasktoBack,那么,之前的那个activity,就是跳转之前不用finish了,因为一旦你finish这个方法了,每次都会移到后台去进行了。
说下在activity在tab的中的生命周期:
当我们用tab去切换的时候,这个activity是走onPause状态,不会走到onStop状态哈。
只有当我们在这个activity中去Intent占满全屏的activity,时候,这个activity才会经历onpause-》onstop-》onrestart()->onstart()
当我们用上述的方法那个去实现自动跳转页面的时候,原来的那个activity会经过onpause-》onresume()两个周期,我也不知道为什么回事这样的。
用上述那个方法,tab每次也是走onpause-》onresmue()路线的
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核心基础-8.Android四大组件之Activity-3.生命周期、横竖屏切换、启动模式、进程管理
- 关于singleInstance模式下activity切换动画问题
- 关于Activity的生命周期和启动模式(附Demo)
- Android学习笔记(1)--关于activity的生命周期和启动模式
- 关于Activity的横竖屏切换引起的生命周期变化的问题
- Android小问题:SingleTask启动模式时,activity的生命周期
- Android基础相关面试问题-activity面试问题(生命周期,任务栈,启动模式,跳转协议)
- 关于Activity及启动模式,Fragment,Service的使用以及生命周期
- 关于横竖屏切换时Activity生命周期的问题
- 关于在一个Activity中启动相机时,生命周期的问题
- 无废话Android之activity的生命周期、activity的启动模式、activity横竖屏切换的生命周期、开启新的activity获取他的返回值、利用广播实现ip拨号、短信接收广播、短信监听器(6)
- 《安卓应用开发学习》——关于Activity无法启动的问题
- HSQLDB学习心得(1)-关于SERVER模式下多个数据库的启动问题与数据库连接
- Android学习记录(8)—Activity的四种加载模式及有关Activity横竖屏切换的问题
- Activity 启动模式 点击通知栏和悬浮框回到应用出现重复页面的问题
- XCode关于多视图切换不显示UIButton等控件的问题
- 关于tomcat中debug模式启动问题
- 【iOS】关于视图生命周期、NSString变CGPath等问题
- Android学习记录(8)—Activity的四种加载模式及有关Activity横竖屏切换的问题
- 关于Activity启动模式的理解