안드로이드 기반의 주석 AOP 프레임 워크

I. 서론

마이크로 순간 SpringBoot 서비스 프레임 워크 자바 다시 화재의 끝, 원인이 노트를 사용하지 않고 할 수 없어, 주석을 구성 할 수있는 간단하고 쉬운 방법은 점차적으로 전통적인 주석 XML 설정을 대체하고 지역 사회 SpringBoot 프레임 워크의 준비에 더 적용 할 수 있습니다 . 안드로이드 메모도 승화되었다 그래서 유명한 프레임 워크 ButterKnife, 등등 Dagger2, 개조합니다. 안드로이드 오늘, 좀 더 실제적인 주석 프레임 워크 가져 AopArms 일반적으로 안드로이드 개발자의 준비 로깅, 차단 (로그인), 비동기 처리, 캐싱, SP, 지연 동작, 일반 작업과 같은 주석 세트를 사용하는 사용하기 쉽고, 메커니즘을 다시 시도, 시도 - 캐치 등 안전 장치, 여과 자주 클릭을, 더 많은 후속 더 강력한 주석이 추가가있을 것입니다.
이 장에서는 데이터 AOP에 실제로 안드로이드, 안드로이드의 사용의 기본적인 내용을 설명하고, 다른 문서를 참조하십시오 안드로이드 프로그래밍의 AOP 개발 .

방법 둘째, 도입

1 주 프로젝트 의존성을 추가

//引入aspectjx插件
apply plugin: 'android-aspectjx'

dependencies {
    ...
    implementation 'cn.com.superLei:aop-arms:1.0.1'
}

2, 프로젝트 디렉토리에 Gradle을 스크립트 추가

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        //该库基于沪江aspect插件库
        classpath 'com.hujiang.aspectjx:gradle-android-plugin-aspectjx:2.0.4'
    }
}

3, 초기화 응용 프로그램

AopArms.init(this);

셋째, 기본 사용

(1), (모든 종류의 캐시의) 캐시 기사

1、插入缓存
    @Cache(key = "userList")
    private ArrayList<User> initData() {
        ArrayList<User> list = new ArrayList<>();
        for (int i=0; i<5; i++){
            User user = new User();
            user.setName("艾神一不小心:"+i);
            user.setPassword("密码:"+i);
            list.add(user);
        }
        return list;
    }
    
2、获取缓存
    private ArrayList<User> getUser() {
        return ACache.get(this).getAsList("userList", User.class);
    }

3、移除缓存
    @CacheEvict(key = "userList")
    public void removeUser() {
        Log.e(TAG, "removeUser: >>>>");
    }
    
3884117 - b876b8f7981326d7
영상

2, 된 SharedPreferences 제품 (대상 저장)

1、保存key到sp
    @Prefs(key = "article")
    private Article initArticle() {
        Article article = new Article();
        article.author = "jerry";
        article.title = "hello android";
        article.createDate = "2019-05-31";
        article.content = "this is a test demo";
        return article;
    }
    
2、从sp中移除key
    @PrefsEvict(key = "article")
    public void removeArticle() {
        Log.e(TAG, "removeArticle: >>>>");
    }

3, 비동기 기사

    @Async
    public void asyn() {
        Log.e(TAG, "useAync: "+Thread.currentThread().getName());
    }

4, 시도 - 캐치 보안 서류

    //自动帮你try-catch   允许你定义回调方法
    @Safe(callBack = "throwMethod")
    public void safe() {
        String str = null;
        str.toString();
    }
    
    //自定义回调方法(注意要和callBack的值保持一致)
    private void throwMethod(Throwable throwable){
        Log.e(TAG, "throwMethod: >>>>>"+throwable.toString());
    }

5 메커니즘 논문을 재 시도

     /**
     * @param count 重试次数
     * @param delay 每次重试的间隔
     * @param asyn 是否异步执行
     * @param retryCallback 自定义重试结果回调
     * @return 当前方法是否执行成功
     */
    @Retry(count = 3, delay = 1000, asyn = true, retryCallback = "retryCallback")
    public boolean retry() {
        Log.e(TAG, "retryDo: >>>>>>"+Thread.currentThread().getName());
        return false;
    }
    
    private void retryCallback(boolean result){
        Log.e(TAG, "retryCallback: >>>>"+result);
    }
3884117-8e368420904f4fae
영상

6, 일반 작업 제

     /**
     * @param interval 初始化延迟
     * @param interval 时间间隔
     * @param timeUnit 时间单位
     * @param count 执行次数
     * @param taskExpiredCallback 定时任务到期回调
     */
    @Scheduled(interval = 1000L, count = 10, taskExpiredCallback = "taskExpiredCallback")
    public void scheduled() {
        Log.e(TAG, "scheduled: >>>>");
    }
    
    private void taskExpiredCallback(){
        Log.e(TAG, "taskExpiredCallback: >>>>");
    }
3884117 - de566c1129847a93
영상

7, 지연 작업 서류

    //开启延迟任务(10s后执行该方法)
    @Delay(key = "test", delay = 10000L)
    public void delay() {
        Log.e(TAG, "delay: >>>>>");
    }
    
    //移除延迟任务
    @DelayAway(key = "test")
    public void cancelDelay() {
        Log.e(TAG, "cancelDelay: >>>>");
    }

8 필터는 자주 클릭

    //value默认500ms
    @SingleClick(value = 2000L)
    private void onclick(){
        Log.e(TAG, "onclick: >>>>");
    }

(예 : 로그인 등) (9), 차단 기사

1、在需要进行拦截的方法添加注解
    @Intercept("login_intercept")
    public void loginIntercept() {
        Log.e(TAG, "intercept: 已登陆>>>>");
    }
2、(建议,统一处理)在Application中进行进行监听拦截回调
public class MyApplication extends Application {

    private static final String TAG = "MyApplication";
    private static MyApplication mApplication;
    
    @Override
    public void onCreate() {
        super.onCreate();
        mApplication = this;
        AopArms.init(this);
        AopArms.setInterceptor(new Interceptor() {
            @Override
            public boolean intercept(String key, String methodName) throws Throwable {
                Log.e(TAG, "intercept methodName:>>>>>"+methodName);
                if ("login_intercept".equals(key)){
                    String userId = SPUtils.get(mApplication, "userId", "");
                    if (TextUtils.isEmpty(userId)){
                        Toast.makeText(mApplication, "您还没有登录", Toast.LENGTH_SHORT).show();
                        return true;//代表拦截
                    }
                }
                return false;//放行
            }
        });
    }
}

이 라이브러리의 기본적인 일반적인 사용하며, 안드로이드의 개발을 단순화하기 위해 더 많은 주석을 추가 할 것 업을 따르에 오신 것을 환영합니다 문제 질문 또는 이상의 주석 수요를 필요가 있다고 생각하게.

GitHub의 주소 : AopArms

HTTPS : //www.jianshu.com/p/79bdcfa8f054 재현

추천

출처blog.csdn.net/weixin_34399060/article/details/91114670