91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用Android怎么模塊化中實現數據傳遞和路由跳轉

發布時間:2021-03-01 15:29:51 來源:億速云 閱讀:158 作者:戴恩恩 欄目:移動開發

這篇文章主要介紹了使用Android怎么模塊化中實現數據傳遞和路由跳轉,億速云小編覺得不錯,現在分享給大家,也給大家做個參考,一起跟隨億速云小編來看看吧!

Android是什么

Android是一種基于Linux內核的自由及開放源代碼的操作系統,主要使用于移動設備,如智能手機和平板電腦,由美國Google公司和開放手機聯盟領導及開發。

模塊通信

首先,統一聲明姿勢:

public interface IComponent {

  String getName();

  void startComponent(ComponentParam param);
}

也就是說,在各自的維護的模塊內若想提供一個類供別的模塊調用那么需要實現這個 IComponent 類,這樣子可以根據面向對象的優勢統一管理,所以我們就有了接下來的這么一個個Component類,比如:

@NeacyComponent("app")
public class AppComponent implements IComponent {

  @Override
  public String getName() {
    return "app";
  }

  @Override
  public void startComponent(ComponentParam param) {
    Log.w("Jayuchou", "==== Start AppComponent ====");
    if (param != null && param.getParam().containsKey("callback")) {
      ICallBack callBack = (ICallBack) param.getParam().get("callback");
      Map<String, Object> results = new HashMap<>();
      results.put("result", "我來自AppComponent");
      ComponentParam cp = new ComponentParam(results);
      callBack.onComponentBack(cp);
    }
  }
}

兩個地方比較重要:

  1. NeacyComponent 這個注釋,主要是為后面的gradle掃描使用

  2. getName() 這個方法返回每個 IComponent 對應的實例key值,方便在不同的模塊我們可以根據這個key值找到對應的 IComponent 對象

其次,如何調用呢?

ComponentController.getComponentByName("app").startComponent(null);

是的,只要根據app這個key值我們就能輕易的找到對應的 IComponent 對象,從而執行 startComponent ,這個方法就是你想要在該模塊做的邏輯地方。

看上面我們聲明的 AppComponent 類,我們在 startComponent 有判斷一下傳入的參數是否為空,這里直接放了一個偽 Map 類專門用于存放傳遞的參數。

如何回調結果以及如何獲取別的模塊的回調結果?

首先你執行了別的模塊的 startComponent 方法,在這個方法中你返回的類肯定只有對應的模塊能識別,也就是說你在自己模塊獲取不到別的模塊中的類,所以這里使用 ComponentParam 采用key/value的風格存放參數以及回調返回結果,然后看一下下面的代碼就能明白答案了。

// 傳遞參數給IComponent, 可以通過傳遞回調函數從而得到回調結果
 Map<String, Object> p = new HashMap<>();
 p.put("callback", new ICallBack() {
   @Override
   public void onComponentBack(ComponentParam result) {
     Log.w("Jayuchou", "==== 運行結果 = " + result.getParam().get("result"));
   }
 });
 ComponentParam cp = new ComponentParam(p);

// 回調結果回去
ICallBack callBack = (ICallBack) param.getParam().get("callback");
Map<String, Object> results = new HashMap<>();
results.put("result", "我來自AppComponent");
ComponentParam cp = new ComponentParam(results);
callBack.onComponentBack(cp);

// 調用的時候傳入參數即可
ComponentController.getComponentByName("app").startComponent(cp);

路由跳轉

首先,老規矩肯定也是聲明一下路由協議(這里只是一個簡單的字符串)

@NeacyProtocol("/activity/a")
public class AActivity extends AppCompatActivity

@NeacyProtocol("/activity/b")
public class BActivity extends AppCompatActivity

@NeacyProtocol("/activity/app")
public class MainActivity extends AppCompatActivity

然后調用就是了:

RouterController.startRouter(MainActivity.this, "/activity/a");// 跳轉到AActivity

Bundle args = new Bundle(); 
args.putString("key", "AActivity"); 
RouterController.startRouter(AActivity.this, "/activity/b", args);// 跳轉到BActivity并攜帶bundle參數

原理

原理就是通過gradle插件結合ASM掃描注解并在編譯的時候注入代碼,我們先看下注入成功后的代碼結構:

1.模塊通信的注入結果

public class ComponentController
{
 static
 {
  registerComponent(new AComponent());
  registerComponent(new BComponent());
  registerComponent(new AppComponent());
 }
 
 private static Map<String, IComponent> components = new HashMap();
 
 static void registerComponent(IComponent component)
 {
  components.put(component.getName(), component);
 }
 . 
 . 
 .
}

2.路由跳轉注入結果

public class RouterController
{
 static
 {
  addRouter("/activity/a", "com.neacy.neacy_a.AActivity");
  addRouter("/activity/b", "com.neacy.neacy_b.BActivity");
  addRouter("/activity/app", "com.neacy.component.MainActivity");
 }
 
 private static Map<String, String> routers = new HashMap();
 
 public static void addRouter(String key, String value)
 {
  routers.put(key, value);
 }
}

以上就是億速云小編為大家收集整理的使用Android怎么模塊化中實現數據傳遞和路由跳轉,如何覺得億速云網站的內容還不錯,歡迎將億速云網站推薦給身邊好友。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

乌恰县| 来安县| 鄂尔多斯市| 盈江县| 贺兰县| 舟曲县| 调兵山市| 宝鸡市| 庐江县| 承德县| 抚顺市| 双江| 大宁县| 沧州市| 筠连县| 西林县| 仲巴县| 日喀则市| 谷城县| 维西| 宿州市| 洛川县| 吉安市| 石狮市| 宽甸| 岱山县| 青阳县| 莱芜市| 中卫市| 宁津县| 纳雍县| 江源县| 宁安市| 高淳县| 阳泉市| 馆陶县| 梓潼县| 保德县| 堆龙德庆县| 南城县| 奎屯市|