Android项目开发过程中会遇到重复快速点击按钮跳转Activity时,多次打开同一个Activity,设置启动模式可以解决此问题,但是设置了启动模式就需要受到启动模式的相应影响,随记录一下另外一种解决方案。
1、Activity跳转时最终都会进入startActivityForResult方法,所以可以在此处做跳转拦截,在项目的Activity基类中重写此方法,如下:
/** * 每次启动activity都会调用此方法,此处主要为了解决快速点击跳转Activity重复打开的问题 */ @SuppressLint("RestrictedApi") @Override public void startActivityForResult(Intent intent, int requestCode, @Nullable Bundle options) { if (checkDoubleClick(intent)) { super.startActivityForResult(intent, requestCode, options); } }
2、checkDoubleClick主要为检查重复跳转的方法:
/** * activity跳转tag */ private String mActivityJumpTag; /** * activity跳转时间 */ private long mClickTime; /** * 检查是否重复跳转,不需要则重写方法并返回true */ protected boolean checkDoubleClick(Intent intent) { // 默认检查通过 boolean result = true; // 标记对象 String tag; if (intent.getComponent() != null) { // 显式跳转 tag = intent.getComponent().getClassName(); }else if (intent.getAction() != null) { // 隐式跳转 tag = intent.getAction(); }else { return true; } if (tag.equals(mActivityJumpTag) && mClickTime >= SystemClock.uptimeMillis() - 500) { // 检查不通过 result = false; } // 记录启动标记和时间 mActivityJumpTag = tag; mClickTime = SystemClock.uptimeMillis(); return result; }
以上就可以解决快速点击后重复打开Activity的问题。