- 1、本文档共17页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
Activity的四种加载模式
通常情况下,一个应用有一个Task,这个Task就是为了完成某个工作的一系列
Activity的集合。而这些Activity又被组织成了堆栈的形式。
当一个 Activity 启动时,就会把它压入该 Task的堆栈,而当用户在该Activity中按返回键,或者代码中finish掉时,就会将它从该Task的堆栈中弹出。如果我们没有特别的需求,我们的应用就会呈现出如下图所示的情形(好吧,我承认这个图是document里的):
然而,事实上我们的需求远没有我们想的那么简单。有时候,你可能希望在开启一个Activity时,重新开启一个Task;有时你可能希望将已经存在的一个Activity放到栈顶,而不是重新创建一个...
Android为了使我们能够打破默认的堆栈的先后出的模式,提供了两个种方式:一种是在AndroidManifest.xml定义Activity时指定它的加载模式,另一种是在用Intent开启一个Activity时,在Intent中加入标志。如果两种方式都用了,则后者的优先级更高。
两种方式的差别在于,前者在于描述自己,向别的Acttivity等声明你们如何来加载我;而后者则是动态的,指出我要求你(要启动的Activity)如何来加载。本文的重点在于研究在AndroidManifest.xml中声明加载模式。
Android为我们定义了四种加载模式,分别是:standard、singleTop、singleTask和singleInstance。
“拿来主义”——standard模式
我们写一段代码来测试一下standard加载模式,如下AndroidManifest.xml里Activity的设置如下:
Java代码
activityandroid:name=.Activity1android:launchMode=standardandroid:label=@string/app_name
intent-filter
actionandroid:name=android.intent.action.MAIN/
category android:name=android.intent.category.LAUNCHER
/
/intent-filter
/activity
Activity1的代码如下
Java代码publicclassActivity1extendsActivity{
@OverridepublicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);setContentView(R.layout.main);
}
/**当点击Activity时,启动另一个Activity1*/@OverridepublicbooleanonTouchEvent(MotionEventevent){
Intentintent=newIntent(this,Activity1.class);startActivity(intent);returnsuper.onTouchEvent(event);
}
}
然后我们启动程序,开启Activity1,然后点击Acitivity1,启动另一个Activity1,
然后再点击,再点击,再点击...之后我们点返回键。
发生了什么事情?没错,我们按返回键返回一个又一个相同的Activity1。standard是Activity默认的加载模式,这种方式用一个词来形容的话就是“拿来主义”。使用这种模式的Activity向所有使用它的Task声明:“我这里的这种Activity多着呢,谁需要的话我就给谁”。所以当一个Task请求加载这个
Activity时,该Task直接实例化该Activity,并把它放到栈顶。
因此我们的例子就出现了这样的堆栈结构(假设我们点击了4次):
Activity1Activity1Activity1Activity1Activity1
我们设想一个情形:我们要做一个图片浏览器,第一个界面是图片列表界面(假设为PictureListActivity),第二个界面是浏览该张图片(假设为PictureViewActivity)。在PictureViewActivity中可以startActivity启动浏览界面浏览上一张和下一张。
如果每一张图片的浏览启动一个PictureViewActivity(当然你可能不是采用这种方式
文档评论(0)