有许多与退栈管理有关的问题,但没有一个真的让我满意。我发现越接近that one,但它对我来说看起来像一个丑陋的解决方法。防止多次启动相同的活动
当活动一个上的按钮点击,我发起一个活动乙与startActivityForResult()
,期待一个简单一个 - >乙回堆栈。 但是,如果你垃圾邮件按钮足够快,你最终有两个意图被解雇,因此两个活动堆积A - >B - >B。
我试图用FLAG_ACTIVITY_SINGLE_TOP
标志,以防止创建第二乙活动,但它并没有改变什么:
这是活动按钮侦听器:
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(getApplicationContext(), ActivityB.class);
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivityForResult(intent, REQUEST_CODE);
}
});
并且日志清楚地指出onCreate()
被调用两次(而不是预期的onNewIntent
):
btn.onClick()
activityB.onCreate()
btn.onClick()
activityB.onCreate()
我的活动必须不是singleTask
也不singleInstance
,他们应该只是任何常规活动的背部堆栈的一部分。任何许可将非常感谢!
点击后禁用按钮。如果你真的担心,请保留一个标志来表示是否应该再次调用'startActivityForResult()'。 – CommonsWare
你能发布你的清单吗? (关于2个活动) – MatPag
@CommonsWare尽管禁用按钮听起来像是一种好方法,但通常它并不有效(特别是在电话繁忙时,或者仅仅是CPU速度较慢的低端设备时)。由于在调用onClick()之前单击该按钮可能会发生多次(此时已经完成了损坏并且禁用该按钮太晚了)。 –