浅谈 Android组件化

  • plugin属性的配置

  • applicationId的配置

  • AndroidManifest的配置

if (isRunAlone.toBoolean()) {

apply plugin: ‘com.android.application’

} else {

apply plugin: ‘com.android.library’

}

android {

compileSdkVersion 26

defaultConfig {

if (isRunAlone.toBoolean()) {

applicationId “ppzh.jd.com.goods”

}

minSdkVersion 15

targetSdkVersion 26

versionCode 1

versionName “1.0”

testInstrumentationRunner “android.support.test.runner.AndroidJUnitRunner”

}

buildTypes {

release {

minifyEnabled false

proguardFiles getDefaultProguardFile(‘proguard-android.txt’), ‘proguard-rules.pro’

}

}

sourceSets {

main {

if (isRunAlone.toBoolean()) {

manifest.srcFile ‘src/main/manifest/AndroidManifest.xml’

} else {

manifest.srcFile ‘src/main/AndroidManifest.xml’

}

}

}

}

如果以上配置就可以实现application和library的切换了

3:组件间的数据传递和方法调用


由于主项目、组件之间,组件和组件之间不能直接通过引用进行数据传递和方法调用,那么在开发的过程中怎么进行数据传递和方法调用呢,可以通过「接口」+「实现」的方式进行,

assemblebase基础库就是用来进行数据传递和方法调用的,它被所有组件所依赖,assemblebase提供各个组件对外提供数据和方法调用的抽象service ,同时还有serviceFactory对service进行操作,各个组件在初始化的时候对各自的service进行实现。同时中也会提供所有的 Service 的空实现,以避免引起的空指针异常

就以登录模块为例,对外提供两个数据

public interface ILoginService {

/**

  • 是否已经登录

  • @return

*/

boolean isLogin();

/**

  • 获取登录用户的 AccountId

  • @return

*/

String getAccountId();

}

相关的serviceFactory类如下,可以通过serviceFactory拉取相关service的实例

public class ServiceFactory {

private ILoginService loginService;

private IGoodsService goodsService;

/**

  • 禁止外部创建 ServiceFactory 对象

*/

private ServiceFactory() {

}

/**

  • 通过静态内部类方式实现 ServiceFactory 的单例

*/

public static ServiceFactory getInstance() {

return Inner.serviceFactory;

}

private static class Inner {

private static ServiceFactory serviceFactory = new ServiceFactory();

}

// ------------------------LoginService------------------------

/**

  • 接收 Login 组件实现的 Service 实例

*/

public void setLoginService(ILoginService loginService) {

this.loginService = loginService;

}

/**

  • 返回 Login 组件的 Service 实例

*/

public ILoginService getLoginService() {

if (loginService == null) {

loginService = new EmptyLoginService();

}

return loginService;

}

在login组件中只需要实现ILoginService,并通过serviceFactory进行设置

public class LoginService implements ILoginService {

@Override

public boolean isLogin() {

return false;

}

@Override

public String getAccountId() {

return null;

}

}

[图片上传失败…(image-4066c0-1627130966768)]

在login的appliction中进行service的设置

public class LoginApp extends BaseApp {

@Override

public void onCreate() {

super.onCreate();

initModuleApp(this);

initModuleData(this);

}

@Override

public void initModuleApp(Application application) {

ServiceFactory.getInstance().setLoginService(new LoginService());

}

@Override

public void initModuleData(Application application) {

}

}

但是有这样一个问题:在集成到app中,LoginApp是没有被执行的,这个怎么解决呢,我们可以通过反射进行解决

public class AssembleApplication extends BaseApp {

@Override

public void onCreate() {

super.onCreate();

initModuleApp(this);

initModuleData(this);

initComponentList();

}

@Override

public void initModuleApp(Application application) {

}

@Override

public void initModuleData(Application application) {

}

//初始化组件

//通过反射初始化

private void initComponentList(){

for (String moduleApp : AppConfig.moduleApps) {

try {

Class clazz = Class.forName(moduleApp);

BaseApp baseApp = (BaseApp) clazz.newInstance();

baseApp.initModuleApp(this);

baseApp.initModuleData(this);

} catch (Exception e) {

e.printStackTrace();

}

}

}

}

如上所示就完成了

4:组件类(例如:Fragment)的获取,以及夸组件页面跳转和通讯


fragment的获取也是通过service来完成的

public interface IGoodsService {

/**

  • 创建 GoodsFragment

  • @param bundle

  • @return

最后

我一直以来都有整理练习大厂面试题的习惯,有随时跳出舒服圈的准备,也许求职者已经很满意现在的工作,薪酬,觉得习惯而且安逸。

不过如果公司突然倒闭,或者部门被裁减,还能找到这样或者更好的工作吗?

我建议各位,多刷刷面试题,知道最新的技术,每三个月可以去面试一两家公司,因为你已经有不错的工作了,所以可以带着轻松的心态去面试,同时也可以增加面试的经验。

我可以将最近整理的一线互联网公司面试真题+解析分享给大家,大概花了三个月的时间整理2246页,帮助大家学习进步。

由于篇幅限制,文档的详解资料太全面,细节内容太多,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!以下是部分内容截图:

部分目录截图

《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!
觉得习惯而且安逸。

不过如果公司突然倒闭,或者部门被裁减,还能找到这样或者更好的工作吗?

我建议各位,多刷刷面试题,知道最新的技术,每三个月可以去面试一两家公司,因为你已经有不错的工作了,所以可以带着轻松的心态去面试,同时也可以增加面试的经验。

我可以将最近整理的一线互联网公司面试真题+解析分享给大家,大概花了三个月的时间整理2246页,帮助大家学习进步。

由于篇幅限制,文档的详解资料太全面,细节内容太多,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!以下是部分内容截图:

[外链图片转存中…(img-XKMaaTfH-1715334977179)]

[外链图片转存中…(img-YOm9l9XW-1715334977180)]

《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!

  • 22
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值