Activity的四种加载模式

在android中,有可能实现大量的Activity跳转,但有时我们想要跳转到某个特定的Activity实例,而不是产生大量重复的Activity这需要为Activity配置特定的加载模式,而不是使用默认的加载模式。

Activity有四种加载模式:

  • standard
  • singleTop
  • singleTask
  • singleInstance

设置的位置在AndroidManifest.xml文件中activity元素的android:launchMode属性:

<activity android:name="ActB"android:launchMode="singleTask"></activity>

四种加载模式介绍:
1、standard :系统的默认模式,一次跳转即会生成一个新的实例。假如有一个Activity A,执行
                    startActivity(new Intent(A.this, A.class));
每点一次跳转,都会产生一个新的Activity实例,栈里的数据量依次增加,按返回键时可以看到是按照刚才创建Activity实例的倒序依次出现,类似退栈的操作,而刚 才操作跳转按钮的过程是压栈的操作.

2.singleTop:singleTop 跟standard 模式比较类似,都会将intent发送新的实例(后两种模式不发送到新的实例,如果已经有了的话)。唯一的区别就是,当 跳转 的对象是位于栈顶的activity(应该可以理解为用户当前所看到的activity)时,程序将不会生成一个新的activity实例,而是直接跳到现存于栈顶的 那个 activity实例。拿上面的例子来说,当A.class 为 singleTop 模式时,执行跳转后栈里面依旧只有一个实例,如果现在按返回键程序将直接退出。 这个 应该用得比较少。

3.singleTask: singleTask模式和后面的singleInstance模式都是只创建一个实例的。在这种模式下,无论跳转的对象是不是位于栈顶的activity,程序 都不会生成一个新的实例(当然前提是栈里面已经有这个实例),如果不想因为跳转的关系导致同个页面生成多个实例的话,那么你将对应的activity声 明为 singleTask 模式,这种问题将不复存在,这样也对你的用户体验有好处.

4.singleInstance:这种模式相对较难理解,而且用的不多,按网上很多人的解释是设置为 singleInstance 模式的 activity 将独占一个task(感觉task可以理 解为进程),独占一个task的activity与其说是activity,还不如说是另一个应用了,它有自己的上下文了,已经独立开来了,举个例子吧. 现在有A,B,C三个Ac tivity,其中B设置为 singleInstance模式,现在依次跳转 A->B->C,现在在C Activity中按下返回键,你会发现程序返回的是A Activity,这 是因为B位于一个独 立的task中,它不属于C的上下文activity,所以此时将直接返回到A, 这就是singleInstance模式.

懂得使用加载模式的,可以帮你的程序更好的提高用户体验.





你可能感兴趣的:(c,android)