Android LaunchMode与任务栈总结

网上关于launch mode的资料有不少,尽可参考. spa

本文旨在进行稍微深刻一点的说明. 设计

简单总结:四中Activity加载方式


  • standard

       默认加载方式.每当须要一个Activity instance的时候系统都会建立一个新的实例给咱们,而且将它置于栈顶.这种方式不关心原有的栈结构. 资源

  • singleTop

      系统首先会寻找栈中的instance,若是已有所需实例且位于栈顶,则直接使用;不然就从新建立新的实例. 源码

  • singleTask

      系统首先会寻找栈中的instance,若栈中已有所需实例,则移出该实例之上的全部实例并使用. it

  • singleInstance

      当Activity的launch mode 被设置为single instance时,该Activity 实例将被建立于一个新的栈中,且该栈只存在一个实例.若有须要则直接从该栈中取来使用. 用户体验


Activity栈结构

那么,上文中所谓的"栈"具体指的什么呢? 程序

一个栈,表明了一个"任务"(task),这个栈中可能存放有来自不一样应用程序的多个Activity,在用户的角度来讲,就像是多个页面连贯展现同样. 总结

咱们使用Intent启动一个新的Activity时,能够经过intent携带的参数设置任务与加载模式,好比设置intent的flag为Intent.FLAG_ACTIVITY_NEW_TASK.新的Activity则会被建立于一个新的任务栈. vi

更多的flag可查阅Intent源码. 工程师


任务栈的做用

Android的返回键一直是一个比较受争议的设计,由于用户根本不知道当他们点击了返回键后会发生什么.之因此会出现这种争议,就是由于不一样的应用在使用任务栈的时候设计不一样,或者工程师没有使用任务栈的意识,以致于有的应用在几屏跳转以后,必需要用户狂按返回键才能退出,用户体验很是很差.

这就是任务堆栈的做用之一.若是应用中包含的Activity不少,使用flag在Activity互相跳转时保持井井有条,提升用户体验.

其次,若是一个应用中存在大量无用的Activity,会大量消耗系统资源,严重可能形成应用崩溃.因此栈结构能够更好地管理Activity,及时销毁无用的task释放资源.

相关文章
相关标签/搜索