参考:https://blog.csdn.net/weixin_38196407/article/details/89924983
背景:在1v1视频中,用户打卡金币支付小商店时,如果此时视频断开了,视频页面VideoActivity会被finish,但是金币小商店不可关闭。
在此背景下,我使用activity作为小商店的对话框,但是当关闭视频界面时,根据栈的先进后出原则,由于此时栈顶是CoinsStoreActivity,虽然VideoActivity被fininsh了,但是并不能调用onDestroy(),造成CoinsStoreActivity对话框的背景黑屏。
第一次解决方案:将CoinsStoreActivity的启动模式改为singleInstance,每次启动CoinsStoreActivity时,重新创建一个栈,这个栈中放着CoinsStoreActivity的实例,此时再finish掉VideoActivity时,没有问题。但是当通过CoinsStoreActivity打开Google的对话框时(也是一个activity),
由于CoinsStoreActivity所在栈只能有一个实例,所以此时CoinsStoreActivity会被干掉,这不符合产品需求。
最终解决方案:将CoinsStoreActivity的启动模式设置为singleTask,通过taskAfinity属性为CoinsStoreActivity指定一个新的任务栈com.coins.task,此时再去打开Google对话框时,会在任务栈com.coins.task的栈顶创建新的Google对话框实例,而CoinsStoreActivity不受影响。至此问题解决。