Activity的四种加载模式.docx

  1. 1、本文档共17页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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)

tianya189 + 关注
官方认证
内容提供者

该用户很懒,什么也没介绍

认证主体阳新县融易互联网技术工作室
IP属地上海
统一社会信用代码/组织机构代码
92420222MA4ELHM75D

1亿VIP精品文档

相关文档