我知道在某些情况下,可能需要限制(或完全禁用)按钮点击。我们一直在使用 RxView 来处理这种情况:
RxView.clicks(button)
.throttleFirst(500, TimeUnit.MILLISECONDS)
.subscribe(aVoid -> {
//do work
});
我不确定的情况是按钮单击何时开始新 Activity 。这种情况有必要 throttle 吗?我最初认为一旦新 Activity 开始,旧 Activity 将不再收到任何对 onClick 的调用,但现在我不确定。
button.setOnClickListener(view -> {
Intent i = new Intent(context, TestActivity.class);
context.startActivity(i);
});
是否有我遗漏的极端情况?感谢任何见解!
最佳答案
是,您仍然应该限制该点击。当对 Activity 调用 finish()
时,您仍然可以在几毫秒的时间内与其进行交互。
- 当您执行
startActivity()
或finish()
时,您只是在排队此请求。实际操作稍后发生,异步。 - 因此,当您开始一项新 Activity 并完成当前 Activity 时,这两件事是异步发生的,并且彼此完全独立。实际上,您是否先完成当前 Activity 并在代码的下一行开始新 Activity 甚至都没有关系。
- 在完全启动之前,B会执行
onCreate()
、onResume()
、onStart()
等逻辑。这需要时间量可变,具体取决于逻辑的耗时情况。 - 在完全完成之前,A 将对
onPause()
、onStop()
和onDestroy()
等(或只是其中的一些,具体取决于您调用finish()
的时间点。
关于Android throttle 按钮单击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42911241/