android 提供服务,GitHub - FamliarMan/AndroidServiceProvider: 为模块化提供的一个服务发现库...
AndroidServiceProvider是為了解決模塊化過程中各模塊服務統一獲取的難題而產生的,具體情況請參照這篇文章
Android模塊化中的服務發現機制
注意混淆
這里特別強調,所有注冊的類都需要避開混淆,因為這里是通過反射實現的
依賴引入
api 'com.jianglei:serviceprovider:0.1'
基本使用
以源碼中的示例代碼為例講解
首先看下當前依賴情況:
當前需求:獲取各模塊名稱
1. 在底層模塊編寫服務接口
比如在bottomlibrary模塊中增加一個服務:
public interface IModuleName {
/**
* 獲取所屬module的名稱
* @return module的名稱
*/
String getModuleName();
}
2.各模塊實現自己的服務
比如在businessone模塊中實現如下:
public class OneModuleName implements IModuleName {
@Override
public String getModuleName() {
return "businessone";
}
}
在businesstwo模塊實現如下:
public class TwoModuleName implements IModuleName {
@Override
public String getModuleName() {
return "businesstwo";
}
}
3. 各模塊暴露自己提供的服務
比如在businessone的AndroidManifest.xml中定義一個meta-data:
android:value="module_name"/>
比如在businesstwo模塊中:
android:value="module_name"/>
注意,請記住此處的value:module_name,同一個服務必須相同
4. 注冊服務
推薦在Application中調用,越早越好:
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
//注意,此處的“module_name"必須和AndroidManifest.xml中注冊的value的值相同,
//此處的IModuleName.class是用來保證各模塊注冊的服務都是它的實現,否則會報錯
JlServiceProvider.register(this,"module_name", IModuleName.class);
}
}
5.獲取所有服務
經過上面的步驟,我們已經能成功的拿到所有模塊的服務了,比如我在app模塊的MainActivity中:
//此處必須保證”module_name"注冊的服務是IModuleName的實現,否則強轉會報錯
List moduleNames = JlServiceProvider.getServices("module_name");
StringBuilder sb = new StringBuilder("目前注冊的模塊有:\n");
for(IModuleName moduleName : moduleNames){
sb.append(moduleName.getModuleName()).append("\n");
}
TextView tvContent = findViewById(R.id.tvContent);
tvContent.setText(sb.toString());
總結
以上是生活随笔為你收集整理的android 提供服务,GitHub - FamliarMan/AndroidServiceProvider: 为模块化提供的一个服务发现库...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 地中海是谁画的呢?
- 下一篇: android多媒体图文混排,干货!!!