AndroidAOPプログラミング



Android Aop Programming



では、AOPとは何ですか?メリットは何ですか?
Face-to-face(AOP)は、多くのメソッドからすべての一般的なコードを抽出し、それらを集中管理のために特定の場所に配置し、特定の実行時に動的にコンテナーに織り込むことです。コードを共有すると、少なくとも2つの問題を解決できます。
1.1 Androidプログラマーは、特定のビジネスロジック処理メソッドを作成するときにコアビジネスロジック処理のみを気にする必要があります。これにより、作業効率が向上するだけでなく、コードの変更がシンプルでエレガントになります。
1.2将来のメンテナンスでは、ビジネスロジックコードは共有コードとは別に保存され、共有コードは一元的に保存されるため、メンテナンス作業はシンプルで簡単です。
基本コンセプト

  • アスペクトアスペクト:ファセットは、ポイントカットと通知のコレクションです。
  • PointCutポイントカット:ポイントカットは、特定の式を使用して除外され、アドバイスに切り込みたいポイントカットです。
  • アドバイス通知:通知は、カットポイントに挿入されるコード実装方法です
  • ジョイントポイント接続ポイント:すべてのターゲットメソッドは接続ポイントです。
  • ウィービングウィービング:主にコンパイル段階で、AJCを使用してアスペクトのコードをターゲットに挿入し、コード混合.classのプロセスを生成します。

一般的な使用シナリオ: ログアスペクト、許可セクション、ネットワークセクションなど。
基本的な使用法:
1aspectJラックパッケージをダウンロードします
2インストール
3build.gradle構成
4aspectJインストールディレクトリ開発パッケージ(aspectjrt.jarパッケージ)をASにコピーします
インスタンス(ネットワークがあるかどうかを判断するため):



カットポイントをマークします

@Target(ElementType.METHOD)// indicates where the note is liberated on the METHOD method @Retention(RetentionPolicy.RUNTIME)/ When to compile, RUNTIME runtime public @interface CheckNet { }

2.カットポイント、カット面を処理します



@Aspect // on the class public class HandleCheckeNet { /** * Processing cut points * Fixed writing, 'execution (@cutting point method under the package name plus **(..))') **(..) stands for all methods */ @Pointcut('execution(@wangandroid.com.aopdemo.CheckNet * *(..))') public void checkBehavior() { } /** * Processing cuts */ @Around('checkBehavior()') public Object checkNet(ProceedingJoinPoint joinPoint) throws Throwable { Log.e('TAG', 'checkNet') / / Do the burying point log upload permission detection network detection // Network detection // 1. Get CheckNet annotations MethodSignature signature = (MethodSignature) joinPoint.getSignature() CheckNet checkNet = signature.getMethod().getAnnotation(CheckNet.class) if (checkNet != null) { / / Determine whether there is a network, first to get the context Object object = joinPoint.getThis() Context context = getContext(object) / / Determine whether there is a network if (!isNetworkAvailable(context)){ // No network, don't go down Toast.makeText(context, 'Please check your network', Toast.LENGTH_LONG).show() return null } } return joinPoint.proceed() } }

3.使用する

@CheckNet public void aopTest(View view) { Intent intent = new Intent(MainActivity.this, Main2Activity.class) startActivity(intent) }

AOPを学びましょう。将来のプログラミングで効率を改善し、コードをクリーンにすることができます。
ソースコード: https://github.com/wubobo952/AopDemo