Activity的启动模式,任务栈的切换

来源:互联网 发布:js 数组值是否存在 编辑:程序博客网 时间:2024/06/03 18:14

Activity的启动模式,任务栈的切换

  • 1.Activity有四种启动模式:

    • 标准: standard 可以启动多个相同的Activity;
      • 在当前Activity中可以通过点击按钮等方式,启动一个与当前Activity相同的Activity(不同应用不会放在同一个任务栈中);
    • 单栈顶 singleTop 可以启动多个不同的Activity,但是在当前Activity处于栈顶时不能再次启动一个与当前Activity相同的Activity;
    • singleTask 可以启动多个不同的Activity,但是如果当前栈中存在要启动的Activity,那么会将要启动的Activity之上的所有Activity全部出栈,将要启动的Activity放在栈顶
    • singleInstance 单例 该Activity独占一个任务栈
  • 2.程序锁中的Bug,如果启动手机卫士,长按Home键进入主页,当我们进入某个需要解锁的应用,输入正确的密码后,会直接进入到手机卫士的界面.

    • 出现这种情况的原因就是任务栈的问题(如果我们进入手机卫士后点退出键退出手机卫士则不会出现类似情况);
    • 当我们进入手机卫士时,由于是开启了一个新的应用,系统会分配一个任务栈给我们,我们在手机卫士中的各种操作的Activity都会进入该栈;如果我们没有退出手机卫士的应用,在点击进入某个需要解锁的应用时(B应用),系统会为B应用分配一个新的任务栈,然后将该任务栈放在手机卫士的任务栈之前;但是我们的监听服务监听到B应用需要输入密码,也启动了一个Activity放在了B应用之上,这时,监听服务启动的activity是属于手机卫士的应用的,在标准模式下,默认放在手机卫士的任务栈中,系统会将手机卫士的任务栈放在B应用任务栈之前;当我们输入密码后,输入密码的Activity关闭,会暴露最前面的任务栈的最上面的一个Activity,也就是我们手机卫士的界面.
    • 要解决这个问题很简单,我们只需要在输入密码的Activity的配置上加一个启动模式为singleInstance的启动模式即可,配置信息如下:


1 0
原创粉丝点击