欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android?組件化神器之Arouter依賴配置使用

 更新時(shí)間:2023年06月29日 14:05:26   作者:沒(méi)有了遇見(jiàn)  
這篇文章主要為大家介紹了Android?組件化神器之Arouter依賴配置使用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

Arouter 支持模塊間的路由、通信、解耦

組件化項(xiàng)目存在各個(gè)模塊之間耦合,通信麻煩的問(wèn)題 ,,為了解決這個(gè)問(wèn)題,阿里巴巴的開(kāi)發(fā)者就搞出了Arouter這個(gè)框架,以解決上述問(wèn)題.

1.依賴和配置

1.1 Java 環(huán)境配置方案

android {
    compileSdkVersion = 30
    buildToolsVersion = "30.0.3"
    defaultConfig {
        applicationId "com.wu.material"
        ....
        //ARouter 配置
        javaCompileOptions {
            annotationProcessorOptions {
                arguments = [AROUTER_MODULE_NAME: project.getName()]
            }
       }
dependencies {
   implementation 'com.alibaba:arouter-api:1.5.1'
   annotationProcessor 'com.alibaba:arouter-compiler:1.2.1'
   }
 }

1.2 Kotlin 環(huán)境配置方案

plugins {
    id 'com.android.application'
    id 'kotlin-android'
    id 'kotlin-kapt'
}
kapt {
    arguments {
        arg("AROUTER_MODULE_NAME", project.getName())
    }
}
android {
    compileSdkVersion = 30
    buildToolsVersion = "30.0.3"
 defaultConfig {
        applicationId "com.wu.material"
      }
dependencies {
    implementation 'com.alibaba:arouter-api:1.5.1'
    kapt 'com.alibaba:arouter-compiler:1.2.1'
}
}

注意:
Kotlin 環(huán)境和 Java 環(huán)境配置不匹配會(huì)報(bào)錯(cuò) ARouter::There is no route match the path

W/ARouter::: ARouter::There is no route match the path [/xxx/xxx], in group [xxx][ ]"

2. 在Application初始化

    /**
     * 初始化路由
     */
    private fun initArouter() {
        // 這兩行必須寫在init之前,否則這些配置在init過(guò)程中將無(wú)效
        if (BuildConfig.DEBUG) { 
            // 打印日志
            ARouter.openLog();   
            // 開(kāi)啟調(diào)試模式(如果在InstantRun模式下運(yùn)行,必須開(kāi)啟調(diào)試模式!線上版本需要關(guān)閉,否則有安全風(fēng)險(xiǎn))
            ARouter.openDebug(); 
        }
        ARouter.init(this)
    }
    override fun onTerminate() {
        super.onTerminate()
        //阿里router需要釋放
        ARouter.getInstance().destroy()
    }

3.Arouter 使用

3.1 Activity Fragment路由配置以及調(diào)用

// 這里的路徑需要注意的是至少需要有兩級(jí),/xx/xx
//注解
@Route(path = "/arouter/ArouterActivity")
class ArouterActivity:AppCompatActivity() {
...
//獲取數(shù)據(jù)
var key2=getIntent().getStringExtra(key2")
}
// 跳轉(zhuǎn)
ARouter.getInstance().build("/arouter/ArouterActivity")
            .withLong("key1", 1l)
            .withString("key2", "888")
            .withObject("key3", new UserInfo("Jack", "Rose"))
            .navigation();
額外方法:
// 構(gòu)建標(biāo)準(zhǔn)的路由請(qǐng)求
ARouter.getInstance().build("/home/main").navigation();
// 構(gòu)建標(biāo)準(zhǔn)的路由請(qǐng)求,并指定分組
ARouter.getInstance().build("/home/main", "ap").navigation();
// 構(gòu)建標(biāo)準(zhǔn)的路由請(qǐng)求,通過(guò)Uri直接解析
Uri uri;
ARouter.getInstance().build(uri).navigation();
// 構(gòu)建標(biāo)準(zhǔn)的路由請(qǐng)求,startActivityForResult
// navigation的第一個(gè)參數(shù)必須是Activity,第二個(gè)參數(shù)則是RequestCode
ARouter.getInstance().build("/home/main", "ap").navigation(this, 5);
// 直接傳遞Bundle
Bundle params = new Bundle();
ARouter.getInstance()
    .build("/home/main")
    .with(params)
    .navigation();
// 指定Flag
ARouter.getInstance()
    .build("/home/main")
    .withFlags();
    .navigation();
// 獲取Fragment
Fragment fragment = (Fragment) ARouter.getInstance().build("/test/fragment").navigation();
// 對(duì)象傳遞
ARouter.getInstance()
    .withObject("key", new TestObj("Jack", "Rose"))
    .navigation();
// 覺(jué)得接口不夠多,可以直接拿出Bundle賦值
ARouter.getInstance()
        .build("/home/main")
        .getExtra();
// 轉(zhuǎn)場(chǎng)動(dòng)畫(常規(guī)方式)
ARouter.getInstance()
    .build("/test/activity2")
    .withTransition(R.anim.slide_in_bottom, R.anim.slide_out_bottom)
    .navigation(this);
// 轉(zhuǎn)場(chǎng)動(dòng)畫(API16+)
ActivityOptionsCompat compat = ActivityOptionsCompat.
    makeScaleUpAnimation(v, v.getWidth() / 2, v.getHeight() / 2, 0, 0);
// ps. makeSceneTransitionAnimation 使用共享元素的時(shí)候,需要在navigation方法中傳入當(dāng)前Activity
ARouter.getInstance()
    .build("/test/activity2")
    .withOptionsCompat(compat)
    .navigation();
// 使用綠色通道(跳過(guò)所有的攔截器)
ARouter.getInstance().build("/home/main").greenChannel().navigation();
// 使用自己的日志工具打印日志
ARouter.setLogger();
// 使用自己提供的線程池
ARouter.setExecutor();

3.2 Arouter 路由跳轉(zhuǎn)的攔截器 IInterceptor

(攔截跳轉(zhuǎn)過(guò)程,面向切面編程)

// 比較經(jīng)典的應(yīng)用就是在跳轉(zhuǎn)過(guò)程中處理登陸事件,這樣就不需要在目標(biāo)頁(yè)重復(fù)做登陸檢查
// 攔截器會(huì)在跳轉(zhuǎn)之間執(zhí)行,多個(gè)攔截器會(huì)按優(yōu)先級(jí)順序依次執(zhí)行
@Interceptor(priority = 10, name = "測(cè)試攔截器")
class ArouterInterceptor : IInterceptor {
    var mContext: Context? = null
    // 攔截器的初始化,會(huì)在sdk初始化的時(shí)候調(diào)用該方法,僅會(huì)調(diào)用一次
    override fun init(context: Context?) {
        mContext = context
    }
    override fun process(postcard: Postcard?, callback: InterceptorCallback?) {
        Log.e("傳遞的數(shù)據(jù)", "")
        if (postcard != null) {
            var service = ARouter.getInstance().navigation(UserService::class.java)
            //跳轉(zhuǎn)過(guò)程中添加數(shù)據(jù)以及處理數(shù)據(jù)
            postcard!!.extras.putString("uid", service.getUid())
        }
        if (callback != null) {
            //傳遞到頁(yè)面
            callback!!.onContinue(postcard);
        }
        // 覺(jué)得有問(wèn)題,中斷路由流程
        // callback.onInterrupt(new RuntimeException("我覺(jué)得有點(diǎn)異常"));
        // 以上兩種至少需要調(diào)用其中一種,否則不會(huì)繼續(xù)路由
    }
}

3.3 處理跳轉(zhuǎn)結(jié)果

 // 增加整個(gè)跳轉(zhuǎn)過(guò)程的監(jiān)聽(tīng) ARouter.getInstance().build("/rv/MediaPlayerActivity").withString("name", "測(cè)試名字?jǐn)?shù)據(jù)")
            .navigation(mContext, object : NavigationCallback {
                override fun onFound(postcard: Postcard?) {
                    Log.e("Arouter", "onFound")
                }
                override fun onLost(postcard: Postcard?) {
                    Log.e("Arouter", "onLost")
                }
                override fun onArrival(postcard: Postcard?) {
                    Log.e("Arouter", "onArrival")
                }
                override fun onInterrupt(postcard: Postcard?) {
                    Log.e("Arouter", "onInterrupt")
                }
            })

3.4 通過(guò)依賴注入解耦:服務(wù)管理

/**
 * @author wkq
 *
 * @date 2022年05月17日 16:45
 *
 *@des  創(chuàng)建服務(wù)
 *
 */
interface UserService:IProvider {
    fun getUid():String?
    fun getName():String?
    fun getFace():String?
}
/**
 * @author wkq
 *
 * @date 2022年05月17日 16:46
 *
 *@des  實(shí)現(xiàn)服務(wù)
 *
 */
// 注解
@Route(path = "/service/UserSericice")
class UserServiceImpl:UserService {
    override fun getUid(): String? {
        return nickUid
    }
    override fun getName(): String? {
        return nickName
    }
    override fun getFace(): String? {
        return nickFace
    }
    var nickName=""
    var nickFace=""
    var nickUid=""
    override fun init(context: Context?) {
        nickName="我是測(cè)試"
        nickFace="我是頭像"
        nickUid="10010"
    }
}
//調(diào)用IProvider 獲取數(shù)據(jù)
//方法1
 var service = ARouter.getInstance().navigation(UserService::class.java)
 var name= service.getName()
//方法2 
var userServiceImpl =ARouter.getInstance().build("/service/UserSericice").navigation() as UserServiceImpl
var userName = userServiceImpl.getName()

總結(jié)

簡(jiǎn)單的調(diào)用了一下Arouter的一些方法,整體功能夠用了,在模塊化架構(gòu)的時(shí)候Arouter是個(gè)利器,一些高級(jí)別使用方式?jīng)]有一一列舉,又興趣的可以去官網(wǎng)看一下,地址放在結(jié)尾

資源

1.Arouter 文檔

2.Demo 源碼

以上就是Android 組件化神器之Arouter依賴配置使用的詳細(xì)內(nèi)容,更多關(guān)于Android 組件化Arouter的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Android onClick按鈕單擊事件的四種常用寫法

    Android onClick按鈕單擊事件的四種常用寫法

    本文主要介紹了Android onClick按鈕單擊事件的四種常用寫法,具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧
    2017-03-03
  • Android 監(jiān)聽(tīng)?wèi)?yīng)用前/后臺(tái)切換實(shí)例代碼

    Android 監(jiān)聽(tīng)?wèi)?yīng)用前/后臺(tái)切換實(shí)例代碼

    本篇文章主要介紹了Android 監(jiān)聽(tīng)?wèi)?yīng)用前/后臺(tái)切換實(shí)例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06
  • Android百度地圖應(yīng)用之基本地圖功能實(shí)現(xiàn)

    Android百度地圖應(yīng)用之基本地圖功能實(shí)現(xiàn)

    這篇文章主要為大家詳細(xì)介紹了Android百度地圖應(yīng)用之基本地圖功能實(shí)現(xiàn)的相關(guān)資料,感興趣的小伙伴們可以參考一下
    2016-06-06
  • Android使用webView加載html頁(yè)面的詳細(xì)步驟

    Android使用webView加載html頁(yè)面的詳細(xì)步驟

    Android WebView是Android開(kāi)發(fā)中提供的一種用于顯示網(wǎng)頁(yè)內(nèi)容的組件,它可以加載網(wǎng)頁(yè)的url鏈接,也可以加載本地的html文件,下面這篇文章主要給大家介紹了關(guān)于Android使用webView加載html頁(yè)面的相關(guān)資料,需要的朋友可以參考下
    2024-06-06
  • 淺談Android 的線程和線程池的使用

    淺談Android 的線程和線程池的使用

    本篇文章主要介紹了淺談Android 的線程和線程池,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08
  • Android中ListView如何分頁(yè)加載數(shù)據(jù)

    Android中ListView如何分頁(yè)加載數(shù)據(jù)

    這篇文章主要介紹了Android中ListView如何分頁(yè)加載數(shù)據(jù),本文就結(jié)合實(shí)例來(lái)演示一下使用ListView獲取數(shù)據(jù)的過(guò)程,需要的朋友可以參考下
    2015-12-12
  • Android自定義照相機(jī)的實(shí)例

    Android自定義照相機(jī)的實(shí)例

    這篇文章主要介紹了Android自定義照相機(jī)的實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • Android?Jetpack?Compose開(kāi)發(fā)實(shí)用小技巧

    Android?Jetpack?Compose開(kāi)發(fā)實(shí)用小技巧

    這篇文章主要為大家介紹了Android?Jetpack?Compose開(kāi)發(fā)中的一些實(shí)用小技巧示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • Android流式布局實(shí)現(xiàn)歷史搜索記錄功能

    Android流式布局實(shí)現(xiàn)歷史搜索記錄功能

    最近在開(kāi)發(fā)項(xiàng)目的時(shí)候,有一個(gè)需求是展示歷史搜索記錄 ,展示的樣式是流式布局(就是根據(jù)內(nèi)容自動(dòng)換行)。接下來(lái)通過(guò)本文給大家分享android流式布局實(shí)現(xiàn)歷史搜索記錄功能,感興趣的的小伙伴參考下
    2017-05-05
  • android view轉(zhuǎn)Bitmap生成截圖的方法

    android view轉(zhuǎn)Bitmap生成截圖的方法

    這篇文章主要介紹了android view轉(zhuǎn)Bitmap生成截圖的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-09-09

最新評(píng)論