日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

(4.2.48)MVPArms源码分析

發布時間:2023/12/9 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (4.2.48)MVPArms源码分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

MVPArms源碼分析

多module下全局Application的沖突和聚合問題

全局配置信息GlobalConfigModule

GlobalConfigModule使用建造者模式將App的全局配置信息封裝進Module(使用Dagger注入到需要配置信息的地方)。

可以配置CacheFile,Interceptor等,甚至于Retrofit,Okhttp,RxCache都可以自定義配置因為使用的是建造者模式所以如您有其他配置信息需要使用Dagger注入,直接就可以添加進Builder并且不會影響到其他地方

Application聚合ConfigModule

ConfigModule 將各個module的相關配置信息注冊到最終的宿主app中,用來給框架配置各種自定義屬性和功能,配合 GlobalConfigModule 使用非常強大

快速開始

  • 在上層module中,實現ConfigModule接口;
  • 在上層module的,AndroidManifest中聲明它
  • ----- 所有module的AndroidManifest在打包期間會合并起來
  • ----- [ManifestParser.class]底層的BaseApplication會解析AndroidManifest拿到所有的ConfigModule實現類的路徑,并通過反射獲取其Class
  • ----- [AppDelegate.class]實例化所有的實現類,并調用其函數
  • public class GlobalConfiguration implements ConfigModule {@Overridepublic void applyOptions(Context context, GlobalConfigModule.Builder builder) {//使用builder可以為框架配置一些全局配置信息builder.baseurl(Api.APP_DOMAIN).cacheFile(New File("cache"));}@Overridepublic void injectAppLifecycle(Context context, List<AppLifecycles> lifecycles) {//向Application的生命周期中注入一些自定義邏輯}@Overridepublic void injectActivityLifecycle(Context context, List<Application.ActivityLifecycleCallbacks> lifecycles) {//向Activity的生命周期中注入一些自定義邏輯}@Overridepublic void injectFragmentLifecycle(Context context, List<FragmentManager.FragmentLifecycleCallbacks> lifecycles) {//向Fragment的生命周期中注入一些自定義邏輯 } }<meta-dataandroid:name="me.jessyan.mvparms.demo.app.GlobalConfiguration"android:value="ConfigModule"/>

    ConfigModule接口定義

    public interface ConfigModule {/*** 使用{@link GlobalConfigModule.Builder}給框架配置一些配置參數** @param context* @param builder*/void applyOptions(Context context, GlobalConfigModule.Builder builder);/*** 使用{@link AppLifecycles}在Application的生命周期中注入一些操作** @param context* @param lifecycles*/void injectAppLifecycle(Context context, List<AppLifecycles> lifecycles);/*** 使用{@link Application.ActivityLifecycleCallbacks}在Activity的生命周期中注入一些操作** @param context* @param lifecycles*/void injectActivityLifecycle(Context context, List<Application.ActivityLifecycleCallbacks> lifecycles);/*** 使用{@link FragmentManager.FragmentLifecycleCallbacks}在Fragment的生命周期中注入一些操作** @param context* @param lifecycles*/void injectFragmentLifecycle(Context context, List<FragmentManager.FragmentLifecycleCallbacks> lifecycles); }

    AppDelegate(代理 Application 生命周期)

    全局Activity管理 AppManager

    AppManager用于管理所有的Activity,內部持有:

  • 一個含有所有存活的Activity(未調用onDestroy)的List
  • 一個當前在最前端的Activity(未調用onPause)
  • AppManager封裝有多種方法,可以很方便的對它們進行操作,也可以在未持有AppManager的情況下,通過EventBus遠程遙控它的所有方法,這樣我們可以在整個app的任何地方對任何Activity進行全局操作,比如在app請求網絡超時時讓最前端的Activity顯示連接超時的交互頁面(這個邏輯不用寫到當前請求的Activity里,可以在一個單例類里做全局的統一操作,因為可以隨時通過AppManager拿到當前的Activity)

    總結

    以上是生活随笔為你收集整理的(4.2.48)MVPArms源码分析的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。