【发布时间】:2018-02-24 18:03:15
【问题描述】:
有很多与回栈管理相关的问题,但没有一个真正让我满意。我找到的越近是that one,但对我来说这似乎是一个丑陋的解决方法。
当点击活动 A 中的按钮时,我正在使用 startActivityForResult() 启动活动 B,期待一个简单的 A - > B 回栈。
但是,如果您向按钮发送垃圾邮件的速度足够快,最终会触发两个意图,因此两个活动堆叠在一起 A -> B -> B .
我尝试使用 FLAG_ACTIVITY_SINGLE_TOP 标志来阻止创建第二个 B 活动,但它没有改变任何东西:
这是活动A中的按钮监听器:
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()。 -
你能发布你的清单吗? (关于 2 项活动)
-
@CommonsWare 虽然禁用该按钮听起来是个好方法,但通常效果不佳(尤其是在电话繁忙,或者只是 CPU 速度较慢的低端设备时)。因为在调用
onClick()之前可能会多次单击该按钮(此时损坏已经造成,禁用该按钮为时已晚)。
标签: android android-intent android-activity