AndroidベースのアノテーションAOPフレームワーク

I.はじめに

火災のマイクロモーメントSpringBootサービスフレームワークのJavaバックエンド、原因は注釈を設定するためのシンプルで簡単な方法は、徐々に伝統的な注釈xml設定を置き換えて、そのコミュニティSpringBootフレームワークの準備、より適用可能に、ノートを使用せずに行うことはできません。Androidの中のノートも昇華されたので、有名なフレームワークButterKnife、その上Dagger2、レトロフィット、と。より実用的な注釈フレームワークもたらし、今日のAndroid AopArms一般的なロギング、傍受(ログイン)、非同期処理、キャッシング、SP、遅れ操作、定期タスクなどのAndroid開発者の注釈のセット、の調製に使用されて使いやすいです、などのメカニズム、のtry-catchを安全機構、ろ過頻繁にクリックし、再試行し、より多くのフォローアップより強力なアノテーションはあり追加されます。
この章のデータはAOPに実際にアンドロイド、アンドロイドの使い方の基本的な内容を説明し、他の記事を参照してくださいAndroidのプログラミングの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証券用紙

    //自动帮你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;//放行
            }
        });
    }
}

これらのライブラリのいくつかの基本的な共通使用している、フォローアップは、Androidの開発を簡素化するために、より注釈を追加します、に歓迎の問題質問をしたり、より多くの注釈の需要が必要だと思う作ります。

GitHubの住所:AopArms

ます。https://www.jianshu.com/p/79bdcfa8f054で再現

おすすめ

転載: blog.csdn.net/weixin_34399060/article/details/91114670