当Activity的launchMode被设置成singleInstance之后,整个手机操作系统里面只有一个该Activity实例存在,可以认为是Activity的单例模式,不同的应用去打开这个activity时共享的同一个activity。且在单独的Task里运行,Task也是唯一的,同时Activity不允许设置taskAffinity属性。
回到你的问题,当A启动singleInstance的B后,会为B单独创建一个Task(正常的Task是通过Activity的taskAffinity属性和singleTask或者FLAG_ACTIVITY_NEW_TASK标志来创建的),并在Task里显示B,这时候会把新Task切换到前台。现在内存里存在两个Task,我们姑且把它们称为TaskA[A]和TaskB[B],且TaskB显示在前端。
这时候如果在B界面上按返回按钮是因为TaskB在TaskA上面,关闭了TaskB所有的界面后自然会把上一个Task也就是TaskA显示在前端,也就是TaskA里的Activity界面A。
在B界面如果按Home键,回到桌面,接着点击应用的icon,按我的理解应该是直接唤起TaskA,所以显示的应该是A界面而不是B界面,不知道你是否搞错了,因为从桌面上点击icon启动Activity的时候会带上FLAG_ACTIVITY_NEW_TASK标志,该标志会检查是否存在和要启动的Activity的taskAffinity标识指定的Task,如果存在则直接唤起对应的Task,也就是TaskA。
如果按了Home键,回到桌面,接着通过任务管理器打开B界面,然后在B上按返回按钮,因为B界面存在一个当杜的TaskB中,按钮了返回按钮后,B界面从TaskB中移除,所以会回到桌面。