![](https://csdnimg.cn/release/download_crawler_static/10392114/bg5.jpg)
我们看到从 MainActivity 跳转到 SecondActivity 时,重新启用了一个新的栈结构,来放
置 SecondActivity 实例,然后按下后退键,再次回到原始栈结构;图中下半部分显示的在
SecondActivity 中 再次跳 转到 MainActivity, 这个时 候系统 会在原 始栈结 构中生 成一个
MainActivity 实例,这时点击 back 发现一个神奇的现象,回到的还是 MainActivity,然后再
点击一次,注意,并没有退出,而是回到了 SecondActivity,为什么呢?是因为从 SecondActivity
跳转到 MainActivity 的时候,在第一个返回栈中创建了新的实例,而 Second 所在的成为了
后台栈,所以说 singleInstance 不要用于中间页面,如果用于中间页面,跳转会有问题,比
如:A -> B (singleInstance) -> C,完全退出后,再次启动,首先打开的是 B。
使用情况:
假设,我们希望我们的应用能和另一个应用共享某个 Activity 的实例。
这样说,可能很难以理解,那么举例来说:
1.现在我们的手机上有“某某地图”以及我们自己的应用。
2.我们希望在我们的应用里共享“某某地图”当中的地图功能界面。
那么,假定的操作就应该为,例如:
1.首先,假设我们在“某某地图”里已经做了一定操作,地图界面被我们定位到了成都市。
2.我们返回了 HOME 界面,打开了自己的应用,在自己的应用里打开了”某某地图”的地图界
面。
3.那么,所谓共享该 Activity 实例,我们要达到的效果就是,当我们打开地图界面,此时地
图上显示的位置就应该是我们之前定位到的成都市。而不是地图的初始化显示方位。
那么,显然,通过此前的 3 种启动模式,我们是实现不了的。因为:
我们最初在“某某地图”中进行定位时,activity 是位于该应用的返回栈里的。
当我们在自己的应用再次调用地图界面,系统的操作是,在我们自己的应用的返回栈里新建
一个地图界面 Activity 的实例对象。
所以实际上两个“地图界面”是位于两个不同应用的各自的返回栈里的,两个毫无关联的
Activity 实例。
MainActivity 位于 Task“8”当中,当我们在自己的应用 MainActivity 当中调用 SecondActivity,
系统新建了返回栈 Task“9”,并在该返回栈中放入一个全新的 SecondActivity 的实例对象。
此时,当我们再打开 SecondActivity 本身所在的应用,调用 SecondActivity,系统则会复用
Task“9”当中的对象,而不会去做其他操作了。
从而,也就是实现了我们的目的,在两个应用间共享某个 Activity。
3. Activity 缓存方法。
Activity 的 onSaveInstanceState() 和 onRestoreInstanceState()并不是生命周期方法,它们