群英传学习笔记

内容一:Activity的任务栈
singleTop的应用场景:
这种启动模式通常适用于接收到信息后显示的界面,例如QQ接收到消息后弹出Actvity,如果一次来10条短信,总不能一次弹10个Activity。
singleTask的应用场景:
如果该Activity不是在栈顶,那么在这个Activity之上的Activity全部被销毁。不过,这种情况指的是在同一个app中启动这个Activity,如果是其他程序以singleTask的模式来启动这个Activity,那么它将创建一个新的任务栈。不过有一点要注意的hi,如果启动的模式是singleTask的Activity已经在一个后台的任务栈中了,那么启动后,这么后台任务栈将一起被切换到前台。

可以发现,使用这个模式创建的Activity不是在新的任务栈中被打开,就是将已经打开的Activity切换到前台,所以这种模式可以退出整个应用:将主Activity设置为singleTask模式,然后在要退出的Activity中转到主Activity,从而将主Activity之上的Activity都清除,然后重写主Activity的onNewIntent()方法,在方法中加上一句finish(),将最后一个activity结束掉。
singleInstance模式:
这种模式通常用于需要与程序分离的界面,如在setupWizard中调用紧急呼叫。

关于singleTop和singleInstance还有一点要注意:如果在singleTop和singleInstance的Activity A中通过startActivityForResult启动另一个ActivityB,那么系统将直接返回Activity.RESULT_CANCELED而不会去等待返回。因为Android开发者认为,不同Task之间,默认是不能传递数据的,如果要传递数据,应该使用Intent来传递。

清空任务栈:
通常情况下可以在清单文件中的<activity>标签中使用以下几种属性来清理任务栈。
  1. clearTaskOnLaunch:在每次返回该Activity都把该Activity之上的Activity都清除。通过这个属性,可以让这个Task每次在初始化的时候,都只有这一个activity。
  2. finishOnTaskLauch
  3. alwaysRetainTaskState:该Activity所在的Task将不接收任何的清理命令

你可能感兴趣的:(群英传学习笔记)