【IOC 控制反转】Android 布局依赖注入 ( 布局依赖注入步骤 | 布局依赖注入代码示例 )
文章目錄
- 總結
- 一、Android 布局依賴注入步驟
- 二、Android 布局依賴注入示例
- 1、創建依賴注入庫
- 2、聲明注解
- 3、Activity 基類
- 4、依賴注入工具類
- 5、客戶端 Activity
- 三、博客源碼
總結
Android 依賴注入的核心就是通過反射獲取 類 / 方法 / 字段 上的注解 , 以及注解屬性 ; 在 Activity 基類中 , 獲取該注解 以及 注解屬性 , 進行相關操作 ;
一、Android 布局依賴注入步驟
正常控制 : Android 中加載布局操作 , 由自己的 Activity 類加載布局 ;
控制反轉 : Android 中加載布局操作 , 由 第三者 加載 Activity 布局 ;
Android 布局依賴注入步驟 :
- ① 客戶端 Activity : 定義 MainActivity , 繼承 BaseActivity ;
- ② IOC 庫中的 Activity 父類 : 定義 BaseActivity , 在 BaseActivity 中的 onCreate 方法中 , 處理依賴注入相關邏輯 ;
- ③ 依賴注入邏輯 : 獲取 Activity 類 , 并使用反射獲取類上的注解屬性 ( 布局文件 ID ) , 為 Activity 設置該布局文件 ;
二、Android 布局依賴注入示例
1、創建依賴注入庫
首先在 Android 應用中 , 創建一個 " Android Library " ,
設置主應用依賴該 Android 依賴庫 :
dependencies {implementation project(path: ':ioc_lib') }2、聲明注解
創建如下注解 :
package kim.hsl.ioc_lib;import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/*** 自定義注解* 用于依賴注入*/ @Target(ElementType.TYPE) // 該注解作用于類上 @Retention(RetentionPolicy.RUNTIME) // 注解保留到運行時 public @interface ContentView {int value(); // 接收 int 類型值 }@Target(ElementType.TYPE) 表示該注解作用與類上 ;
@Retention(RetentionPolicy.SOURCE) 注解保留到源碼期 , Java 源碼時期 RetentionPolicy.SOURCE -> Class 字節碼時期 RetentionPolicy.CLASS -> JVM 運行時時期 RetentionPolicy.RUNTIME ;
int value() 表示該注解接收一個 int 類型的值 ;
3、Activity 基類
package kim.hsl.ioc_lib;import android.app.Activity; import android.os.Bundle;import androidx.annotation.Nullable;public class BaseActivity extends Activity {@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 在此處注入布局// 此處傳入的 Activity 參數是 MainActivity 子類對象InjectUtils.inject(this);} }
4、依賴注入工具類
package kim.hsl.ioc_lib;import android.app.Activity;public class InjectUtils {/*** 為 Activity 注入布局* @param activity 該 Activity 是繼承了 BaseActivity 的 MainActivity 實例對象*/public static void inject(Activity activity) {// 獲取 Class 字節碼對象Class<? extends Activity> clazz = activity.getClass();// 反射獲取類上的注解ContentView contentView = clazz.getAnnotation(ContentView.class);// 獲取注解中的布局 IDint layoutId = contentView.value();// 為 Activity 設置顯示的布局activity.setContentView(layoutId);} }
5、客戶端 Activity
package kim.hsl.ioc_demo;import kim.hsl.ioc_lib.BaseActivity; import kim.hsl.ioc_lib.ContentView;/*** 當該 MainActivity 啟動時 , 調用 BaseActivity 的 onCreate 方法* 在 BaseActivity 的 onCreate 方法中注入布局*/ @ContentView(R.layout.activity_main) public class MainActivity extends BaseActivity { }
運行結果 :
三、博客源碼
GitHub : https://github.com/han1202012/IOC_Demo
CSDN : https://download.csdn.net/download/han1202012/24010683
總結
以上是生活随笔為你收集整理的【IOC 控制反转】Android 布局依赖注入 ( 布局依赖注入步骤 | 布局依赖注入代码示例 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【IOC 控制反转】IOC 简介 ( 依
- 下一篇: 【IOC 控制反转】Android 视图