Activity的4种启动模式(2)—Android开发进阶

发表于:2016-6-21 09:18

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:何红辉    来源:51Testing软件测试网原创

  (51Testing软件测试网获人民邮电出版社和作者授权连载本书部分章节。任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任。)
  4.singleInstance
  设置了singleInstance模式的Activity会在一个独立的任务中开启,并且这个新的任务中有且只有这一个实例,也就是说被该实例启动的其他Activity会自动运行于另一个任务中。当再次启动该Activity实例时,会重用已存在的任务和实例。并且会调用该实例的onNewIntent()函数,将Intent实例传递到该实例中。
  和singleTask不同的是,同一时刻在系统中只会存在一个这样的Activity实例,而singleTask模式的Activity是可以有多个实例的,只要这些Activity在不同的任务栈中即可,例如,应用A启动了一个启动模式为singleTask的ActivityA,应用B又通过Intent想要启动一个ActivityA,此时由于应用A和应用B都有自己的任务栈,因此,在这两个任务栈中分别都有一个ActivityA示例。而singleInstance能够保证Activity在系统中只有一个实例,不管多少应用要启动该Activity,这个Activity有且只有一个,如图1-8所示。
  
▲图1-7 处在ActivityA上的Activity被销毁▲图1-8 singleInstance的Activity独占一个任务栈
  1.1.3  FragmentActivity与Fragment
  为了更好地运用越来越大的屏幕控件,Android在3.0版本引入了Fragment,它可以像Activity一样包含布局。不同的是Fragment是被嵌套在Activity中使用,它作为一个更大粒度的UI单元。如果需要兼容低于Android 3.0的系统,那么开发人员需要引用android-support-v4的jar包才能使用Fragment功能。
  假如有这样的场景:我们的新闻应用含有两个Activity,第一个Activity是显示新闻标题、概要信息的列表,当用户点击这些标题时进入该新闻的详情页面进行阅读。
  这是一个再普通不过的场景,但是这样做真的合适吗?我们是否能够简化用户的操作?
  答案是:必须的!
  Fragment就是为了应对这种情况而出现的,我们可以使用两个Fragment,Fragment1包含了一个新闻标题的列表,每行显示一个新闻的标题;Fragment2则展示这条新闻的详细内容。如果现在程序运行在竖屏模式的平板电脑或手机上,Fragment 1可能嵌入在一个Activity中,而Fragment 2可能嵌入在另一个Activity中,如图1-9所示。
  而如果现在程序运行在横屏模式的平板电脑上,两个Fragment就可以嵌入在同一个Activity中,如图1-10所示。
  
▲图1-9 每个Activity包含一个Fragment          ▲图1-10 横屏模式下包含两个Fragment的Activity
  就目前开发来说,使用Fragment已经成为流行的开发方式,尽管在它的support v4中存在各种各样的Bug,以至于Square这样的公司举起了声讨Fragment的大旗,但是也不能阻止Fragment"驰骋"在大屏幕手机盛行的时代。
本文选自《Android开发进阶—从小工到专家》第一章,本站经人民邮电出版社和作者的授权。
版权声明:51Testing软件测试网获人民邮电出版社和作者授权连载本书部分章节。
任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任。
相关文章:
Android的构成基石之四大组件(1)—Android开发进阶
22/2<12
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号