Activity重复跳转

2019-01-26 23:48:00

点击按钮跳转新的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;
    }
}








  • 2021-02-19 16:46:35

    window安装composer

    Composer 是 PHP 的一个依赖管理工具。它允许你申明项目所依赖的代码库,它会在你的项目中为你安装他们。

  • 2021-02-21 22:52:12

    php去除字符串中的HTML标签

    php自带的函数可以去除/删除字符串中的HTML标签/代码。 strip_tags(string,allow):函数剥去 HTML、XML 以及 PHP 的标签。 参数:string,必填,规定要检查的字符串;allow,选填,规定允许存在的标签,这些标签不会被删除。

  • 2021-03-02 16:00:30

    git pull时的filename too long的错误

    这是因为git在windowa下的文件名长度最大是260,(git在Linux下最大支持4096长度的文件名),可以通过输入以下命令解决:

  • 2021-03-05 13:18:03

    mjml教程详解

    mjml如何快速编写响应式电子邮件

  • 2021-03-15 10:34:55

    Sass函数:Sass Maps的函数-map-get($map,$key)

    map-get($map,$key) 函数的作用是根据 $key 参数,返回 $key 在 $map 中对应的 value 值。如果 $key 不存在 $map中,将返回 null 值。此函数包括两个参数: