- getIntent().getIntExtra("intParam", 0);
- getIntent().getData().getQueryParameter("preActivity");
为了简化这部分工作,路由框架 Router 中供给了 Injector 模块在编译时生成上述代码。参数注入器(Injector)部分经由过程 Java 编译时注解来实现,实现思路和 ButterKnife 这类编译时注解框架类似。
起首定义我们的参数注解 InjectUriParam :
- @Target(ElementType.FIELD)
- @Retention(RetentionPolicy.CLASS)
- public @interface InjectUriParam {
- String value() default "";
- }
然后实现一个注解处理器 InjectProcessor ,在编译阶段生成获取参数的代码:
- @AutoService(Processor.class)
- public class InjectProcessor extends AbstractProcessor {
- ...
- @Override
- public boolean process(Set<? extends TypeElement> set, RoundEnvironment roundEnvironment) {
- //解析注解
- Map<TypeElement, TargetClass> targetClassMap = findAndParseTargets(roundEnvironment);
- //解析完成后,生成的代码的构造已经有了,它们存在InjectingClass中
- for (Map.Entry<TypeElement, TargetClass> entry : targetClassMap.entrySet()) {
- ...
- }
- return false;
- }
- ...
- }
应用方法类似于 ButterKnife ,在 Activity 中我们应用 Inject 来注铰一?全局变量:
- @Inject User user;
然后>
如许我们就可以获取到前面经由过程 Router 跳转的传参了。
- 因为篇幅限制,加上为了便于懂得,这里只贴出了极少部分 Router 框架的源码。欲望进一步懂得 Router 实现道理的可以到 GiuHub 去翻阅源码,Router 的实现还比较简陋,后面会进一步完美功能和文档,之后也会有零丁的文┞仿具体介绍。源码地址:https://github.com/BaronZ88/Router
问题及建议
资本名冲突
汽车的┞封些模块是由不合的工厂临盆的,一辆 BMW 的发念头可能是由位于德国的工厂临盆的,它的主动变数箱可能是 Jatco(世界三大年夜变速箱厂商之一)位于日本的工厂临盆的,车轮可能是中国的工厂临盆的,最后交给华晨宝马的工厂同一组装成一辆完全的汽车。这就类似于我们在软件工程范呈攀里说的多团队并行开辟,最后将各个团队开辟的模块同一打包成我们可应用的 App 。
- defaultConfig {
- ...
- resourcePrefix "new_house_"
- ...
- }
- <application
推荐阅读
【51CTO.com原创稿件】提到Linux,我们就会想到红帽,就跟提到Windows就会想到微软一样。作为一家专注于架构平>>>详细阅读
本文标题:Android模块化探索与实践
地址:http://www.17bianji.com/lsqh/35300.html
1/2 1