美文网首页
Activity重复跳转

Activity重复跳转

作者: 主音King | 来源:发表于2018-12-21 18:04 被阅读29次

    点击按钮跳转新的activity,可能会出现多次跳转的bug
    1、通过AOP切面可以解决(这里不讨论)

    textView.setOnClickListener(new OnClickListener() {
        @EnableFastOnClick
        @Override
        public void onClick(View v) { }
    });
    

    看起来简洁,对每一处进行注解开发成本高,容易遗漏。

    2、通过设置Activity的启动模式singleTop

    singleTop: 如果任务栈顶存在这个要开启的Activity,不会重新创建Activity,而是复用已经存在的Activity。
    在清单文件中设置简单,但是这样就只能指定singleTop,开发成本较高,容易遗漏

    3、最佳方案:拦截

    public abstract class BaseActivity extends AppCompatActivity {
    
        @Override
        public void startActivityForResult(Intent intent, int requestCode, @Nullable Bundle options) {
            if (startActivitySelfCheck(intent)) {
                // 查看源码得知 startActivity 最终也会调用 startActivityForResult
                super.startActivityForResult(intent, requestCode, options);
            }
        }
    
        private String mActivityJumpTag;
        private long mActivityJumpTime;
    
        /**
         * 检查当前 Activity 是否重复跳转了,不需要检查则重写此方法并返回 true 即可
         *
         * @param intent          用于跳转的 Intent 对象
         * @return                检查通过返回true, 检查不通过返回false
         */
        protected boolean startActivitySelfCheck(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 result;
            }
    
            if (tag.equals(mActivityJumpTag) && mActivityJumpTime >= SystemClock.uptimeMillis() - 500) {
                // 检查不通过
                result = false;
            }
    
            // 记录启动标记和时间
            mActivityJumpTag = tag;
            mActivityJumpTime = SystemClock.uptimeMillis();
            return result;
        }
    }
    

    相关文章

      网友评论

          本文标题:Activity重复跳转

          本文链接:https://www.haomeiwen.com/subject/cxiekqtx.html