Androidコンポーネント最適ルーティング-ARetrofit
7402 ワード
Androidはコンポーネント化された最適なルートで、簡単に作られています.
Githubソース:ARetrofit
テキスト
demo
demo apkダウンロード
紹介する
ネーミングから見ると、Android開発をしている仲間たちは知り合いのように感じているのではないでしょうか...はい、Retrofit、優れたネットフレームワークで、現在多く使われていますが、その使い方はよく知られていると思います.
ARetrofitは、module間通信を簡単に実現できる優れたAndroidコンポーネント化フレームワークです.ここでRetrofitを接尾辞として命名したのは,主にretrofit大神のアーキテクチャ構想を尊重し,開発者の学習と使用コストを低減することを目的としている.
プロジェクトをコンポーネント化している場合は、ARetrofitが選択されません.
二機能紹介 Activity Callbackを追加し、1つのパラメータを構成することによってActivityコールバックを実現し、任意のパラメータを返信することができ、onActivity Resultの煩雑な書き方に別れを告げ、より柔軟な を使用する.は直接解析標準URLによるジャンプ をサポートする.はmodule間通信 をサポートする.は複数のブロッキングの追加をサポートし、カスタムブロッキング順序 をサポートする.は依存注入をサポートし、 は単独で依存注入フレームワークとして使用することができる.は、自動登録フレームワークとして単独で使用することができる . InstantRun をサポート MultiDex(Googleスキーム) をサポートページ、ブロッキング、サービスなどのコンポーネントは、フレーム に自動的に登録する.はFragment の取得をサポートする. Kotlinミキシング をサポートプロセス間通信(完備しなければならない~)IPC業務があればABridgeプロセス間通信の最も牛案の特徴を参考にすることができる:簡単で、低侵入(Activity/Fragment/その他のクラスでルート登録を宣言する必要があるだけ)、使いやすい 原理解析
二基本用法
Step 1:依存と構成の追加 project gradle file app gradle file lib module gradle file kotlin lib module gradle file
Step 2:ルーティング注記の宣言 Activity Fragment
Step 3:インタフェース向けプログラミング:ARetrofitがActivity/Fragment通信をインタフェースに変換
Step 4:SDKの初期化
Step 5:ルーティング操作の開始
Step 6:Proguardを使用している場合は、混同ルールを追加します.
3 Activity Callbackのサポート
onActivity Resultに別れを告げ、ログインコールバックなどのコードをより簡潔かつ柔軟にする
Step 1:ログインインタフェースの登録
Step 2:ログインコールバック操作(優雅なログインコールバックの実現)
四高次用法ログインコンポーネントを例に .
Step 1ログインサービスの宣言
注意:自分で宣言したサービスは混同を防ぐ必要があります.
Step 2実装サービス
Step 3サービスインタフェースの登録
Step 4ブロッキング機能
五ようこそfork、issues
Githubソース:ARetrofit
テキスト
demo
demo apkダウンロード
紹介する
ネーミングから見ると、Android開発をしている仲間たちは知り合いのように感じているのではないでしょうか...はい、Retrofit、優れたネットフレームワークで、現在多く使われていますが、その使い方はよく知られていると思います.
ARetrofitは、module間通信を簡単に実現できる優れたAndroidコンポーネント化フレームワークです.ここでRetrofitを接尾辞として命名したのは,主にretrofit大神のアーキテクチャ構想を尊重し,開発者の学習と使用コストを低減することを目的としている.
プロジェクトをコンポーネント化している場合は、ARetrofitが選択されません.
二機能紹介
二基本用法
Step 1:依存と構成の追加
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:x.x.x'
//
classpath "com.sjtu.yifei:auto-inject:1.0.1"
}
}
// plugin:'com.android.application' ,
apply plugin: 'com.sjtu.yifei.autoinject'
dependencies {
...
annotationProcessor "com.sjtu.yifei:auto-complier:1.5.0"
api "com.sjtu.yifei:auto-api:1.5.0"
}
apply plugin: 'kotlin-kapt' //kotlin
dependencies {
...
//kotlin kapt
kapt "com.sjtu.yifei:auto-complier:1.5.0"
api "com.sjtu.yifei:auto-api:1.5.0"
}
Step 2:ルーティング注記の宣言
/**
* this activity in test-module1
*/
@Route(path = "/test-module1/Test1Activity")
public class Test1Activity extends AppCompatActivity {
...
}
/**
* this fragment in login-module
*/
@Route(path = "/login-module/TestFragment")
public class TestFragment extends Fragment {
...
}
Step 3:インタフェース向けプログラミング:ARetrofitがActivity/Fragment通信をインタフェースに変換
/**
* this interface in router-module
*/
public interface RouteService {
//Activity , /Flags/requestCode, android
@Flags(Intent.FLAG_ACTIVITY_NEW_TASK)
@Go("/test-module1/Test1Activity")
boolean launchTest1Activity(@Extra("para1") String para1, @Extra("para2") int para2);
@Go("/test-module1/Test1Activity")
boolean launchTest1ActivityForResult(@Extra("para1") String para1, @Extra("para2") int para2, @RequestCode int requestCode);
//Fragment , , android
@Go("/login-module/TestFragment")
Fragment getTestFragment(@Extra("param1") String para1, @Extra("param2") int[] para2);
}
Step 4:SDKの初期化
// application onCreate()
Routerfit.init(this);
Step 5:ルーティング操作の開始
private void launchTest1Activity(String para1, int para2) {
//
Routerfit.register(RouteService.class).launchTest1Activity(para1,para2);
}
Step 6:Proguardを使用している場合は、混同ルールを追加します.
-keep class * implements com.sjtu.yifei.ioc.**{*;}
-keep class * implements com.sjtu.yifei.annotation.AutoRegisterContract{*;}
3 Activity Callbackのサポート
onActivity Resultに別れを告げ、ログインコールバックなどのコードをより簡潔かつ柔軟にする
Step 1:ログインインタフェースの登録
public interface RouteService {
...
// ActivityCallback Activity
@Go("/login-module/LoginActivity")
boolean launchLoginActivity(@Extra ActivityCallback callback);
}
Step 2:ログインコールバック操作(優雅なログインコールバックの実現)
@Interceptor(priority = 3)
public class LoginInterceptor implements AInterceptor {
private static final String TAG = "LoginInterceptor";
@Override
public void intercept(final Chain chain) {
//Test2Activity
if ("/login-module/Test2Activity".equalsIgnoreCase(chain.path())) {
Routerfit.register(RouteService.class).launchLoginActivity(new ActivityCallback() {
@Override
public void onActivityResult(int i, Object data) {
if (i == Routerfit.RESULT_OK) {//
Toast.makeText(ActivityLifecycleMonitor.getTopActivityOrApp(), " ", Toast.LENGTH_LONG).show();
chain.proceed();
} else {
Toast.makeText(ActivityLifecycleMonitor.getTopActivityOrApp(), " / ", Toast.LENGTH_LONG).show();
}
}
});
} else {
chain.proceed();
}
}
}
四高次用法
Step 1ログインサービスの宣言
/**
* this interface in router-module
*
*/
public interface ILoginProvider {
String login();
}
注意:自分で宣言したサービスは混同を防ぐ必要があります.
-keep class * implements com.sjtu.yifei.route.ILoginProvider{*;}
Step 2実装サービス
/**
* the ILoginProvider in login-module/
*/
@Route(path = "/login-module/ILoginProviderImpl")
public class ILoginProviderImpl implements ILoginProvider {
private String para1;
private int para2;
public ILoginProviderImpl(String para1, int para2) {
this.para1 = para1;
this.para2 = para2;
}
@Override
public String login() {
Routerfit.register(RouteService.class).launchLoginActivity();
return "ILoginProviderImpl para1:" + para1 + ",para2:" + para2;
}
}
Step 3サービスインタフェースの登録
public interface RouteService {
...
// ,
@Go("/login-module/ILoginProviderImpl")
ILoginProvider getILoginProviderImpl(@Extra("param1") String para1, @Extra("param2") int para2);
}
Step 4ブロッキング機能
// , 。 :priority ,
@Interceptor(priority = 3)
public class LoginInterceptor implements AInterceptor {
private static final String TAG = "LoginInterceptor";
@Override
public void intercept(Chain chain) {
Log.e(TAG,"path:" + chain.path());
// Test2Activity
if ("/login-module/Test2Activity".equalsIgnoreCase(chain.path())) {
if( /** */) {//
//
ILoginProvider iProvider = Routerfit.register(RouteService.class).getILoginProviderImpl("provider from login-module", 10001);
if (iProvider != null) {
iProvider.login();
} else {
// ,
chain.proceed();
}
}
} else {
// ,
chain.proceed();
}
}
}
五ようこそfork、issues