zoukankan      html  css  js  c++  java
  • XAOP的使用示范例子

    代码地址如下:
    http://www.demodashi.com/demo/12976.html

    XAOP

    一个简易的AOP(Android)应用框架。囊括了最实用的AOP应用。

    api

    特点

    • 支持快速点击切片@SingleClick,支持设置快速点击的时间间隔。

    • 支持动态申请权限切片@Permission,支持自定义响应动作。

    • 支持主线程切片@MainThread

    • 支持IO线程切片@IOThread,支持多种线程池类型。

    • 支持日志打印切片@DebugLog,支持自定义日志记录方式。

    • 支持内存缓存切片@MemoryCache,支持设置缓存大小。

    • 支持磁盘缓存切片@DiskCache,支持自定义磁盘缓存,缓存有效时间等。

    • 支持自定义拦截切片@Intercept,支持自定义切片拦截。

    1、演示

    2、如何使用

    目前支持主流开发工具AndroidStudio的使用,直接配置build.gradle,增加依赖即可.

    2.1、Android Studio导入方法,添加Gradle依赖

    1.先在项目根目录的 build.gradle 的 repositories 添加:

    allprojects {
        repositories {
            ...
            maven { url "https://jitpack.io" }
        }
    }
    

    2.再在项目根目录的 build.gradle 的 dependencies 添加xmark插件:

    buildscript {
        ···
        dependencies {
            ···
            classpath 'com.github.xuexiangjys.XAOP:xaop-plugin:1.0.0'
        }
    }
    

    3.在项目的 build.gradle 中增加依赖并引用xaop插件

    apply plugin: 'com.xuexiang.xaop' //引用xaop插件
    
    dependencies {
        ···
        implementation 'com.github.xuexiangjys.XAOP:xaop-runtime:1.0.0'  //添加依赖
    }
    
    

    4.在Application中进行初始化

    
    XAOP.init(this); //初始化插件
    XAOP.debug(true); //日志打印切片开启
    XAOP.setPriority(Log.INFO); //设置日志打印的等级,默认为0
    
    //设置动态申请权限切片 申请权限被拒绝的事件响应监听
    XAOP.setOnPermissionDeniedListener(new PermissionUtils.OnPermissionDeniedListener() {
        @Override
        public void onDenied(List<String> permissionsDenied) {
            ToastUtil.get().toast("权限申请被拒绝:" + Utils.listToString(permissionsDenied));
        }
    
    });
    
    //设置自定义拦截切片的处理拦截器
    XAOP.setInterceptor(new Interceptor() {
        @Override
        public boolean intercept(int type, JoinPoint joinPoint) throws Throwable {
            XLogger.d("正在进行拦截,拦截类型:" + type);
            switch(type) {
                case 1:
                    //做你想要的拦截
                    break;
                case 2:
                    return true; //return true,直接拦截切片的执行
                default:
                    break;
            }
            return false;
        }
    });
    
    

    3、切片的使用

    3.1、快速点击切片使用

    1.使用@SingleClick标注点击的方法。注意点击的方法中一定要有点击控件View作为方法参数,否则将不起作用。

    2.可以设置快速点击的时间间隔,单位:ms。不设置的话默认是1000ms。

    @SingleClick(5000)
    public void handleOnClick(View v) {
        XLogger.e("点击响应!");
        ToastUtil.get().toast("点击响应!");
        hello("xuexiangjys", "666666");
    }
    
    

    3.2、动态申请权限切片使用

    1.使用@Permission标注需要申请权限执行的方法。可设置申请一个或多个权限。

    2.使用@Permission标注的方法,在执行时会自动判断是否需要申请权限。

    @SingleClick
    @Permission({PermissionConsts.CALENDAR, PermissionConsts.CAMERA, PermissionConsts.LOCATION})
    private void handleRequestPermission(View v) {
    
    }
    

    3.3、主线程切片使用

    1.使用@MainThread标注需要在主线程中执行的方法。

    2.使用@MainThread标注的方法,在执行时会自动切换至主线程。

    @MainThread
    private void doInMainThread(View v) {
        mTvHello.setText("工作在主线程");
    }
    

    3.4、IO线程切片使用

    1.使用@IOThread标注需要在io线程中执行的方法。可设置线程池的类型ThreadType,不设置的话默认是Fixed类型。

    线程池的类型如下:

    • Single:单线程池
    • Fixed:多线程池
    • Disk:磁盘读写线程池(本质上是单线程池)
    • Network:网络请求线程池(本质上是多线程池)

    2.使用@IOThread标注的方法,在执行时会自动切换至指定类型的io线程。

    @IOThread(ThreadType.Single)
    private String doInIOThread(View v) {
        return "io线程名:" + Thread.currentThread().getName();
    }
    

    3.5、日志打印切片使用

    1.使用@DebugLog标注需要打印的方法和类。可设置打印的优先级,不设置的话默认优先级为0。注意:如果打印的优先级比XAOP.setPriority设置的优先级小的话,将不会进行打印。

    2.使用@DebugLog标注的类和方法在执行的过程中,方法名、参数、执行的时间以及结果都将会被打印。

    3.可调用XAOP.setISerializer设置打印时序列化参数对象的序列化器。

    4.可调用XAOP.setLogger设置打印的实现接口。默认提供的是突破4000限制的logcat日志打印。

    @DebugLog(priority = Log.ERROR)
    private String hello(String name, String cardId) {
        return "hello, " + name + "! Your CardId is " + cardId + ".";
    }
    

    3.6、内存缓存切片使用

    1.使用@MemoryCache标注需要内存缓存的方法。可设置缓存的key,不设置的话默认key为方法名+参数1+参数2+...

    2.标注的方法一定要有返回值,否则内存缓存切片将不起作用。

    3.使用@MemoryCache标注的方法,可自动实现缓存策略。默认使用的内存缓存是LruCache

    4.可调用XAOP.initMemoryCache设置内存缓存的最大数量。默认是Runtime.getRuntime().maxMemory() / 1024) / 8

    @MemoryCache
    private String hello(String name, String cardId) {
        return "hello, " + name + "! Your CardId is " + cardId + ".";
    }
    
    

    3.7、磁盘缓存切片使用

    1.使用@DiskCache标注需要磁盘缓存的方法。可设置缓存的key,不设置的话默认key为方法名+参数1+参数2+...

    2.可设置磁盘缓存的有效期,单位:s。不设置的话默认永久有效。

    3.标注的方法一定要有返回值,否则磁盘缓存切片将不起作用。

    4.使用@DiskCache标注的方法,可自动实现缓存策略。默认使用的磁盘缓存是JakeWharton的DiskLruCache

    5.可调用XAOP.initDiskCache设置磁盘缓存的属性,包括磁盘序列化器IDiskConverter,磁盘缓存的根目录,磁盘缓存的最大空间等。

    @DiskCache
    private String hello(String name, String cardId) {
        return "hello, " + name + "! Your CardId is " + cardId + ".";
    }
    
    

    3.8、自定义拦截切片使用

    1.使用@Intercept标注需要进行拦截的方法和类。可设置申请一个或多个拦截类型。

    2.如果不调用XAOP.setInterceptor设置切片拦截的拦截器的话,自定义拦截切片将不起作用。

    3.使用@Intercept标注的类和方法,在执行时将自动调用XAOP设置的拦截器进行拦截处理。如果拦截器处理返回true的话,该类或方法的执行将被拦截,不执行。

    4.使用@Intercept可以灵活地进行切片拦截。比如用户登录权限等。

    @SingleClick(5000)
    @DebugLog(priority = Log.ERROR)
    @Intercept(3)
    public void handleOnClick(View v) {
        XLogger.e("点击响应!");
        ToastUtil.get().toast("点击响应!");
        hello("xuexiangjys", "666666");
    }
    
    @DebugLog(priority = Log.ERROR)
    @Intercept({1,2,3})
    private String hello(String name, String cardId) {
        return "hello, " + name + "! Your CardId is " + cardId + ".";
    }
    

    【注意】:当有多个切片注解修饰时,一般是从上至下依次顺序执行。

    4、项目截图

    代码地址如下:
    http://www.demodashi.com/demo/12976.html

    注:本文著作权归作者,由demo大师代发,拒绝转载,转载需要作者授权

  • 相关阅读:
    POJ 1392 Ouroboros Snake 欧拉回路
    POJ 1275 Cashier Employment 差分约束+二分答案
    POJ 1780 Code 欧拉回路+手写栈DFS
    POJ 1300 Door Man 欧拉路的判断
    HDU1534 Schedule Problem 差分约束
    POJ 3169 Layout 差分约束
    POJ 1364 King 差分约束 找负环
    ZOJ 2770 Burn the Linked Camp 差分约束+SPFA
    Zoj 2027 Travelling Fee 最短路变形
    Poj 2263 Heavy Cargo Floyd 求最大容量路
  • 原文地址:https://www.cnblogs.com/demodashi/p/9437724.html
Copyright © 2011-2022 走看看