Skip to content

yhyzgn/android-aop

Repository files navigation

Aop

plugin-aspectj 996.icu LICENSE

定义了一些常用的AOP功能,比如点击防抖动、防退出提示等。相比常规实现方式,AOP简洁方便

基本使用

  • 添加依赖

    • 引入plugin-aspectj插件

      在项目下的build.gradle中如下配置

      lastVersion请参考GradlePlugins

      dependencies {
          classpath 'com.yhy.plugins:plugin-aspectj:lastVersion'
      }
    • 应用插件

      在需要aop操作模块的build.gradle中如下配置

      apply plugin: 'plugin-aspectj'
    • 引入aop

      添加aop库依赖

      lastVersion是此库的最新版本号

      dependencies {
          implementation 'com.yhy.aop:aop-core:lastVersion'
      }
  • 初始化

    在项目Application中进行初始化

    public class App extends Application {
        @Override
        public void onCreate() {
            super.onCreate();
            AOP.init(this).debug(BuildConfig.DEBUG).logger(new AOP.Logger(){
                public void log(String log) {
                    // 日志打印
                    LogUtils.i(log);
                }
            });
        }
    }
  • 点击防抖动

    为了防止手指抖动连续点击view多次而导致打开多个页面,或者执行多次xx操作,需要做防抖动操作。

    支持多种方式

    • 普通的点击事件

      tvClick.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View view) {
              log("被单击了");
          }
      });
    • Lambda形式的点击事件

      tvClickLambda.setOnClickListener(v -> {
          log("拉姆达被点击了");
      });
    • ButterKnife的点击事件

      @Click(R.id.tv_butter)
      public void click(int viewId){
          // ...
      }
    • 开启防抖动功能

      Application中添加@EnableClickResolver注解。value是防抖动时间,默认为1000ms,单位ms

      @EnableClickResolver(3000)
      public class App extends Application {
      }
    • 忽略某些点击事件

      如果有些控件确实不需要防抖动,需要在点击事件方法上加@ClickIgnored注解

      tvClickIgnore.setOnClickListener(new View.OnClickListener() {
          @ClickIgnored
          @Override
          public void onClick(View view) {
              log("被忽略了" + MainActivity.this.getPackageName());
          }
      });
  • 防退出提示

    一般在应用的主页上按了返回按钮,都会有 “再按一次退出应用” 之类的提示,用AOP实现起来更方便。

    • 在主页面(需要作退出提示的页面)的Activity上加上@MainBackResovler注解

      参数说明:

      • value:提示消息。默认值:“再按一次退出应用”
      • interval:时间间隔,在这段时间内再按一次,才能退出。默认值:3000ms
      • callback:作提示操作的回调,需要实现OnBackCallback接口。默认值:OnBackCallback.class
      @MainBackResolver(value = "有种再按一次试试", interval = 5000, callback = OnBackListener.class)
      public class MainActivity extends AppCompatActivity {
      }
    • 重写父类的onBackPressed()方法

      由于防退出是对主页面的onBackPressed()方法做了切面,但aspectj无法切到父类的方法,所以此页面必须从写该方法。

      注意:如果不重写该方法,很可能不会有防退出提示

      @Override
      public void onBackPressed() {
          super.onBackPressed();
      }

-- 也就这么多啦~~