即使使用 launchMode="singleTask" 也可以启动两次活动
Posted
技术标签:
【中文标题】即使使用 launchMode="singleTask" 也可以启动两次活动【英文标题】:launch activity twice even with launchMode="singleTask" 【发布时间】:2020-06-10 00:04:27 【问题描述】:我有一个活动来显示两个不一致的目标的游览详细信息
第一 该活动有一个预订按钮,该按钮重定向到银行付款并在付款成功或不成功后返回活动。这就是为什么我在清单中设置启动模式以停止重新创建活动。
android:launchMode="singleTask"
第二
该活动有一个重定向到类似旅游的按钮,然后我必须在startActivity()
之前调用finish();
以使意图工作!
onNewIntent()
内部活动获取第一部分的数据
@Override
protected void onNewIntent(Intent intent)
super.onNewIntent(intent);
if (intent.getData() != null)
Helper.logDebug("fsfsfsgsgsgs", "inside get data not null");
String query = intent.getData().getQuery();
Helper.logDebug("fsfsfsgsgsgs","query is "+ query);
if (query!=null && query.contains("Status=OK"))
if (frgBtmReserve!=null)
frgBtmReserve.dismiss();
String count=query.substring(16);
Helper.logDebug("fsfsfsgsgsgs","count is "+ count);
frgObjectInfo.updateReserveCount(count);
Helper.logDebug("fsfsfsgsgsgs", "inside status ok");
Helper.notifyUserDone(getResources().getString(R.string.success_tour_reserve), this,R.drawable.ic_tick);
else
frgBtmReserve.dismiss();
Helper.logDebug("fsfsfsgsgsgs", "inside status nok");
Helper.notifyUserWarning(getResources().getString(R.string.error_tour_reserve), this);
点击第二部分,它应该创建当前活动的新实例,但由于活动的启动模式为singleTask
.intent 直到我在finish()
startActivity()
之前才起作用
Intent intent = new Intent(context, ActivityShowObject.class);
intent.putExtra(ActivityShowObject.INTENT_KEY_TYPE, Obj.TYPE_TRAVEL);
intent.putExtra(ActivityShowObject.INTENT_KEY_COLOR, color);
intent.putExtra(ActivityShowObject.INTENT_KEY_OBJ_ID, obj.getAgencyId());
((AppCompatActivity)context).finish();
startActivity(intent);
Animatoo.animateShrink(context);
这是我的问题 想一想正在查看一些类似旅行的用户,然后按返回,应用程序会回到第一步!大家有什么建议吗?
【问题讨论】:
你需要展示你的代码让我们看懂代码! 我已经添加了一些我的代码!有帮助吗?如果不需要我的代码的哪一部分? 使用“singleTask”启动模式会导致问题。银行付款如何返回到您的应用? 【参考方案1】:摆脱
android:launchMode="singleTask"
首先。我认为这是错误的用例,让你更难。
你有两种情况:
1) 本次行程新增活动付费 2) 新活动浏览另一个旅游#2 使用正常的startActivity
路由,这将允许正常的后退导航
对于#1,您也可以使用普通的startActivity
,但我有一种感觉,当他们成功付款时,您不希望他们按回以返回游览,但如果他们付款不成功,您确实想让他们回去?
如果是这种情况,您可以在导航到排名第一的付款方案时使用startActivityForResult
。
当他们成功完成支付时调用
setResult(RESULT_OK)
如果他们不成功
setResult(RESULT_CANCELLED)
然后当他们反击时,结果被传播到第一个活动,你可以使用它来调用 finish()
或不调用。
【讨论】:
谢谢布伦德尔!这听起来像是一个很好的解决方案。在您回答后我有一个想法,我将创建一个收据活动,在付款成功或不成功后加载。收据付款将有一个按钮导航到我的旅游活动,返回将导航到旅游信息。如果付款不成功,用户会自动导航游览信息活动...我会对此进行测试并告诉您结果。以上是关于即使使用 launchMode="singleTask" 也可以启动两次活动的主要内容,如果未能解决你的问题,请参考以下文章
当使用 startActivityForResult 启动活动时,LaunchMode "singleTop" 会被忽略
onActivityResult 与 launchMode="singleTask"?
设置 launchMode="singleTask" 与设置活动 launchMode="singleTop"