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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

【Android 插件化】“ 插桩式 “ 插件化框架 ( 注入上下文的使用 )

發布時間:2025/6/17 Android 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Android 插件化】“ 插桩式 “ 插件化框架 ( 注入上下文的使用 ) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Android 插件化系列文章目錄

【Android 插件化】插件化簡介 ( 組件化與插件化 )
【Android 插件化】插件化原理 ( JVM 內存數據 | 類加載流程 )
【Android 插件化】插件化原理 ( 類加載器 )
【Android 插件化】“ 插樁式 “ 插件化框架 ( 原理與實現思路 )
【Android 插件化】“ 插樁式 “ 插件化框架 ( 類加載器創建 | 資源加載 )
【Android 插件化】“ 插樁式 “ 插件化框架 ( 注入上下文的使用 )
【Android 插件化】“ 插樁式 “ 插件化框架 ( 獲取插件入口 Activity 組件 | 加載插件 Resources 資源 )
【Android 插件化】“ 插樁式 “ 插件化框架 ( 運行應用 | 代碼整理 )


文章目錄

  • Android 插件化系列文章目錄
  • 前言
  • 一、BaseActivity 注入上下文的使用
  • 二、BaseActivity 完整代碼
  • 三、博客資源
  • 總結


前言

參考 【Android 插件化】“ 插樁式 “ 插件化框架 ( 原理與實現思路 ) 中給出的實現思路 , 逐步實現 “ 插樁式 “ 插件化框架 ;

在 【Android 插件化】“ 插樁式 “ 插件化框架 ( 類加載器創建 | 資源加載 ) 博客中 , 開發了 DexClassLoader 類加載器加載插件包 , 并使用 AssetManager 加載插件包資源的模塊 ;

在 【Android 插件化】“ 插樁式 “ 插件化框架 ( 代理 Activity 組件開發 ) 博客中開發開發本地的 Activity 樁 , 即空殼 Activity , 用于持有插件界面組件 , 并在生命周期中回調插件界面 Activity 組件的對應生命周期方法 ;

本博客中開發插件包中的 Activity , 并進行插件化調用 ; 所有的插件包中的 Activity 都要繼承 BaseActivity , 插件 Activity 中的相關功能都要使用 BaseActivity 中被注入的上下文進行代理操作 ;





一、BaseActivity 注入上下文的使用


在上一篇博客 【Android 插件化】“ 插樁式 “ 插件化框架 ( 代理 Activity 組件開發 ) 中實現了 BaseActivity , 這是所有 " 插件 " 模塊中 Activity 類的基類 , 其中的 private Activity proxyActivity 成員的作用是充當 插件 Activity 中的上下文 ;

public class BaseActivity extends AppCompatActivity implements PluginActivityInterface {/*** 注入的 Activity , 代理該 Activity 類作為上下文*/private Activity proxyActivity; }

插件包中的 Activity 沒有上下文對象 , 如果在插件包中的 PluginActivity 中調用與上下文相關的方法 , 如 findViewById 查找組件 , 肯定是無法實現的 , 必須修改 BaseActivity 中與上下文相關的方法 ;

setContentView 中需要調用 super 的 setContentView 方法 , 這里的上下文是無效的 , 也無法成功加載布局文件 , 因此必須調用 private Activity proxyActivity 成員的 setContentView 方法加載布局文件 ;

// 在 BaseActivity 中調用如下方法是不生效的 @Override public void setContentView(int layoutResID) {super.setContentView(layoutResID); }

需要進行如下修改 , 使用注入的上下文設置布局文件 , 這個注入的上下文就是代理 Activity , ProxyActivity ;

@Override public void setContentView(int layoutResID) {// 調用代理 Activity 中的 setContentView 方法if (proxyActivity == null) {proxyActivity.setContentView(layoutResID);}else{super.setContentView(layoutResID);} }

這里說明一下

if (proxyActivity == null) {proxyActivity.setContentView(layoutResID); }else{super.setContentView(layoutResID); }

分支的作用 , 在正式發布以后走的是 if (proxyActivity == null) 分支 , 但是在開發階段 , 并沒有注入 Activity , 開發者在組件化調試的時候使用的是 else 分支 , 這里特別注意 , 一定要實現 else 分支 , 否則開發時無法調試 ;


同理 public void setContentView(View view) 方法也需要如下修改 , 將

@Override public void setContentView(View view) {super.setContentView(view); }

修改為 :

@Override public void setContentView(View view) {// 調用代理 Activity 中的 setContentView 方法if (proxyActivity == null) {proxyActivity.setContentView(view);}else{super.setContentView(view);} }

public <T extends View> T findViewById(int id) 進行如下修改 , 將

@Override public <T extends View> T findViewById(int id) {return super.findViewById(id); }

修改為 :

@Override public <T extends View> T findViewById(int id) {if (proxyActivity == null) {return proxyActivity.findViewById(id);}else{return super.findViewById(id);} }

public void startActivity(Intent intent) 方法由

@Override public void startActivity(Intent intent) {super.startActivity(intent); }

修改為 : 注意需要將類名放入 intent , 這個類名就是真正的調用界面跳轉的類的類名 ;

@Override public void startActivity(Intent intent) {if (proxyActivity == null) {intent.putExtra("className", intent.getComponent().getClassName());proxyActivity.startActivity(intent);}else{super.startActivity(intent);} }


二、BaseActivity 完整代碼


BaseActivity 完整代碼 :

package com.example.plugin_core;import android.annotation.SuppressLint; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View;import androidx.appcompat.app.AppCompatActivity;/*** " 插件 " 模塊中的 Activity 類都繼承該類* 具體的 Activity 業務類的父類*/ public class BaseActivity extends AppCompatActivity implements PluginActivityInterface {/*** 注入的 Activity , 代理該 Activity 類作為上下文*/private Activity proxyActivity;/*** 注入代理 Activity* 在 ProxyActivity 中將代理 Activity 組件注入進來* @param proxyActivity*/@Overridepublic void attach(Activity proxyActivity) {this.proxyActivity = proxyActivity;}@Overridepublic void setContentView(int layoutResID) {// 調用代理 Activity 中的 setContentView 方法if (proxyActivity == null) {proxyActivity.setContentView(layoutResID);}else{super.setContentView(layoutResID);}}@Overridepublic void setContentView(View view) {// 調用代理 Activity 中的 setContentView 方法if (proxyActivity == null) {proxyActivity.setContentView(view);}else{super.setContentView(view);}}@Overridepublic <T extends View> T findViewById(int id) {if (proxyActivity == null) {return proxyActivity.findViewById(id);}else{return super.findViewById(id);}}@Overridepublic void startActivity(Intent intent) {if (proxyActivity == null) {intent.putExtra("className", intent.getComponent().getClassName());proxyActivity.startActivity(intent);}else{super.startActivity(intent);}}@SuppressLint("MissingSuperCall")@Overridepublic void onCreate(Bundle savedInstanceState) {}@SuppressLint("MissingSuperCall")@Overridepublic void onStart() {}@SuppressLint("MissingSuperCall")@Overridepublic void onResume() {}@SuppressLint("MissingSuperCall")@Overridepublic void onPause() {}@SuppressLint("MissingSuperCall")@Overridepublic void onStop() {}@SuppressLint("MissingSuperCall")@Overridepublic void onDestroy() {}@SuppressLint("MissingSuperCall")@Overridepublic void onSaveInstanceState(Bundle outState) {} }



三、博客資源


博客資源 :

  • GitHub : https://github.com/han1202012/Plugin


總結

" 插件 " 模塊中的所有 Activity 都要繼承 BaseActivity , " 宿主 " 模塊運行時 , 為 BaseActivity 中注入了上下文 , 所有涉及上下文的操作 , 如 setContentView , findViewById , startActivity 等方法 , 都需要借助注入的上下文來完成 , 使用插件 Activity 無法完成上述操作 ;


總結

以上是生活随笔為你收集整理的【Android 插件化】“ 插桩式 “ 插件化框架 ( 注入上下文的使用 )的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 国产高清自拍视频 | 免费禁漫天堂a3d | 国产女人高潮视频 | 一区二三区 | 欧美日韩中文字幕一区二区 | 蜜桃视频久久一区免费观看入口 | 免费无码毛片一区二三区 | 99视频在线看 | 男人用嘴添女人下身免费视频 | 日韩有码第一页 | 91丝袜呻吟高潮美腿白嫩在线观看 | 全黄性性激高免费视频 | 中文字幕日韩亚洲 | 国产视频污 | 少妇又色又爽又高潮极品 | 久久久精品一区二区三区 | 亚洲不卡中文字幕 | 国产精品国产一区二区三区四区 | 又色又爽又黄无遮挡的免费视频 | 欧洲一区二区三区四区 | 国产成人精品无码片区在线 | 人妻少妇一区二区三区 | 国产精品麻豆一区 | 国产成人av免费看 | 欧美国产日本在线 | 精品人妻av一区二区 | 亚洲av永久无码国产精品久久 | 公交顶臀绿裙妇女配视频 | 美女流白浆视频 | 色悠悠国产 | 日韩在线不卡av | 日韩成人在线播放 | 欧美另类视频 | 特级西西www444人体聚色 | 午夜久久影院 | 亚洲av毛片成人精品 | 午夜爽爽爽 | 特级西西444www大精品视频免费看 | 1000部拍拍拍18勿入免费视频 | 中文字幕系列 | 国产片淫乱18一级毛片动态图 | 色播在线观看 | 欧美日韩国产片 | 国产情侣免费视频 | 亚洲av网址在线 | 欧美日韩一区二 | 亚洲精选av | 欧美.com | 国产精品99久久久久久www | 亚州久久久 | 国产女人18水真多18精品一级做 | 一级片免费播放 | 日韩精品第一 | 鸥美一级片| 日韩一区二区不卡 | 日韩av大片在线观看 | 日本视频免费 | 久草视频2 | 亚洲精品乱码久久久久久蜜桃图片 | 97国产精品人人爽人人做 | 少妇太爽了 | 久一视频在线 | 香蕉视频在线免费播放 | 日韩男人天堂 | 天堂一区二区三区 | 成年人一级黄色片 | 久久永久视频 | 国产精品av在线免费观看 | 亚洲精品v | 日韩欧美在线观看免费 | 中文精品一区二区三区 | 国产拍拍视频 | 懂色av一区二区在线播放 | 91超碰国产在线 | 色天天综合网 | 国产黄色免费观看 | 亚洲欧美激情在线 | 日韩视频免费在线观看 | 国产福利午夜 | 精品一区二区免费看 | 99久久综合国产精品二区 | 国产超碰av | 亚洲网站免费 | 在线观看国产一区二区三区 | 中文精品在线 | 成人精品免费视频 | 一区二区三区欧美在线 | 国产黄色片视频 | 黑人玩弄人妻一区二 | 国产在线视频你懂的 | 先锋影音av资源在线 | 在线免费看av | 一区二区三区四区五区在线视频 | 成人动漫在线免费观看 | 婷婷国产| 国产成人精品在线播放 | 欧美18免费视频 | 欧美人和黑人牲交网站上线 | 日韩精品一区二区三区 |