這篇文章的是根據(jù)組件化項目部署實例里面的例子來說明組件之間怎么通信的。
思考:如果我們想personal子模塊跳轉(zhuǎn)到order子模塊怎么辦罩引?
注意事項:需要準確的全類名路徑
public void jumpOrder(View view) {
// 類加載跳轉(zhuǎn),可以成功怔匣。維護成本較高且容易出現(xiàn)人為失誤
try {
Class targetClass = Class.forName("com.migill.modular.order.Order_MainActivity");
Intent intent = new Intent(this, targetClass);
startActivity(intent);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
1捌浩、為什么在common中寫一個全局路徑記錄器快集?
因為所有子模塊都引用了公共模塊际度,各個模塊都可以調(diào)用common中的方法葵袭。
2、在什么地方寫全局Map中添加數(shù)據(jù)的代碼?
在app模塊中的AppApplication中添加記錄,在集成化模式時乖菱,app引用order坡锡、personal子模塊。
- 跳轉(zhuǎn)的實現(xiàn)窒所,Personal_MainActivity實現(xiàn)如下方法鹉勒。
public void jumpOrder(View view) {
Class<?> targetClass = RecordPathManager.getTargetClass("order", "Order_MainActivity");
if (targetClass == null) {
Log.e(Constant.TAG, "獲取跳轉(zhuǎn)targetClass失敗吵取!");
return;
}
Intent intent = new Intent(this, targetClass);
startActivity(intent);
}
- 全局Map添加數(shù)據(jù)
public class AppApplication extends BaseApplication {
@Override
public void onCreate() {
super.onCreate();
RecordPathManager.joinGroup("app", "MainActivity", MainActivity.class);
RecordPathManager.joinGroup("order", "Order_MainActivity", Order_MainActivity.class);
RecordPathManager.joinGroup("personal", "Personal_MainActivity", Personal_MainActivity.class);
}
}
- 全局路徑記錄器(根據(jù)子模塊分組)
package com.migill.common;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class RecordPathManager {
//key "order"組 value:order子模塊下禽额,對應(yīng)所在的Activity路徑信息
private static Map<String, List<PathBean>> groupMap = new HashMap<>();
/**
* 將路徑信息加入全局Map
* @param groupNmae 組名,如"personal"
* @param pathName 路徑名皮官,如"Personal_MainActivity"
* @param clazz 類名脯倒,如"Personal_MainActivity.java"
*/
public static void joinGroup(String groupNmae, String pathName, Class<?> clazz) {
List<PathBean> list = groupMap.get(groupNmae);
if (list == null) {
list = new ArrayList<>();
list.add(new PathBean(pathName, clazz));
groupMap.put(groupNmae, list);
} else {
for (PathBean pathBean : list) {
if (pathName.equalsIgnoreCase(pathBean.getPath())) {
return;
}
}
list.add(new PathBean(pathName, clazz));
groupMap.put(groupNmae, list);
}
}
/**
* 根據(jù)組名和路徑名獲取類對象,達到跳轉(zhuǎn)的目的
*
* @param groupName
* @param pathName
* @return
*/
public static Class<?> getTargetClass(String groupName, String pathName) {
List<PathBean> list = groupMap.get(groupName);
if (list == null) {
return null;
}
for (PathBean pathBean : list) {
if (pathName.equalsIgnoreCase(pathBean.getPath())) {
return pathBean.getClazz();
}
}
return null;
}
/**
* 清理捺氢、回收
*/
public static void recycleGroup() {
groupMap.clear();
groupMap = null;
System.gc();
}
}