用户从活动A开始,可以从那里进入活动B和C.
活动C使用Dropbox Core API在我们的应用和Dropbox之间同步数据,因此当用户转到C时,它会启动Dropbox身份验证机制,从而打开Chrome浏览器,用户可以在其中输入他的Dropbox凭据并允许该应用程序访问他的Dropbox内容。然后,浏览器再次调用活动C,同步发生。之后,我们希望再次显示活动A:
----> C ---> Chrome (Dropbox sign-in)
A <
----> B
我们尝试的第一个选项是在活动C中调用finish()
,因此它会弹出活动堆栈并再次显示活动A.
问题:如果我们这样做,Android就不再显示活动A,而是浏览器,用户之前登录Dropbox。所以finish()
时刻的堆栈似乎是:
A ----> C ---> Chrome (Dropbox sign-in) ----> C
而不是
A ----> C
所以我们通过启动活动A和Intent
的{{1}}来尝试它,所以所有活动都从堆栈中清除:
FLAGS_ACTIVITY_CLEAR_TOP
问题:如果用户转到活动B并按下后退按钮,则会再次显示活动C.
不是A ----> C ---> Chrome (Dropbox sign-in) ----> C
|
V
A
意味着活动C被清除掉了吗?我怎样才能实现我的目标?
答案 0 :(得分:0)
你需要做两件事:
您需要在启动活动C 的意图中使用FLAG_ACTIVITY_NEW_TASK
。
在您的清单文件中,活动C launchMode = "singleTop"
。
答案 1 :(得分:0)
使用选项1和2的组合似乎可行:
finish();
Intent intent = new Intent(this, A.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
这将完成活动C,同时创建一个显示活动A的新意图。
之后,活动堆栈似乎就像我们想要的那样:没有活动C再次弹出。