Android-基础-关于活动的启动模式

关于活动的启动模式

  • 关于活动的启动模式
    • 问题:如果想“跳转到某一活动后,点击返回按钮,直接退出应用”怎么办?
  • 活动的启动模式演示
    • 活动栈:
    • 关于一开始的问题
    • 演示
      • Standard
      • SingleTask
  • 活动的启动模式详解

关于活动的启动模式

注:启动模式详解部分全部来源于郭神的第二行代码

问题:如果想“跳转到某一活动后,点击返回按钮,直接退出应用”怎么办?

换句话说,跳转activity,如何清空之前全部的activity栈?
比如说,做退出登录功能,此时需要将界面跳转到登录界面。如果直接intent跳转,那么此时点击返回键,就会回退到,只有登录的用户才可以进入的界面。这样显然是不符合需求的。那么我们此时需要做的就是跳转,并将栈中所有Activity清空。
解决办法

Intent intent = new Intent(A.this,B.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

活动的启动模式演示

活动栈:

Android中的活动是可以层叠的。我们每启动一个新的活动,就会覆盖在原活动之上,然后点击Back键会销毁最上面的活动,下面的一个活动就会重新显示出来。
其实Android是使用任务(Task)来管理活动的,一个任务就是一组存放在栈里的活动的集合,这个栈也被称作返回栈(Back Stack)。栈是一种后进先出的数据结构,在默认情况下,每当我们启动了一个新的活动,它会在返回栈中入栈,并处于栈顶的位置。而每当我们按下Back键或调用finish()方法去销毁一个活动时,处于栈顶的活动会出栈,这时前一个入栈的活动就会重新处于栈顶的位置。系统总是会显示处于栈顶的活动给用户。
示意图2.19展示了返回栈是如何管理活动入栈出栈操作的。
Android-基础-关于活动的启动模式_第1张图片

关于一开始的问题

我们想达到的目的就是清空栈和将登陆Activity置于栈顶。
首先startActivity的时候传递FLAG_ACTIVITY_CLEAR_TASK这个标志,那么这个标志将会清除之前所有已经打开的activity.然后将会变成另外一个空栈。
那么FLAG_ACTIVITY_NEW_TASK又是什么呢?
这就涉及到活动的启动模式的知识了。
Activity有四种启动模式:standard、singTop、singleTask和singleInstance。

演示

Standard

standard,活动的默认启动模式就是它。
在这种模式下每次都会创建一个新的栈压入返回栈中。
如下所示,使用intent,点击界面时跳转。
页面1->页面2->页面3->页面1依次压入返回栈中。
此时点击Back键,会销毁最上面的活动,下面的一个活动就会重新显示出来。
页面1->页面3->页面2->页面1->退出应用。

SingleTask

在这种模式下如果返回栈中已存在,就会将其上面的活动全部出栈,使其重新显示在栈顶。

    <activity android:name=".FirstActivity"
        android:launchMode="singleTask">

注意:由于页面1,我设置了其活动启动方式为singleTask。所以当从页面3跳转到页面1时,它会去返回栈中寻找是否已存在界面1,结果是存在,这时,就会把压在界面1上面的活动全部出栈。
页面1->页面2->页面3->界面1->退出应用
此时点击返回键,由于压在界面1上的活动都已出栈了。所以会直接退出应用。

也就是说,此时的活动1其实是复用,所以它的onCreate方法并不会执行。虽然他用了intent跳转,但是此时的活动1只是相当于从不可见状态恢复可见,只会执行onRestart方法。
Android-基础-关于活动的启动模式_第2张图片

活动的启动模式详解

Android-基础-关于活动的启动模式_第3张图片Android-基础-关于活动的启动模式_第4张图片
Android-基础-关于活动的启动模式_第5张图片
Android-基础-关于活动的启动模式_第6张图片
Android-基础-关于活动的启动模式_第7张图片
Android-基础-关于活动的启动模式_第8张图片
Android-基础-关于活动的启动模式_第9张图片
Android-基础-关于活动的启动模式_第10张图片
Android-基础-关于活动的启动模式_第11张图片

Java基础不好的小水怪,正在学习。有错请指出,一起加油。

你可能感兴趣的:(android)