1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > android组件化数据生命周期 Android组件化开发实践(七):开发常见问题及解决方案...

android组件化数据生命周期 Android组件化开发实践(七):开发常见问题及解决方案...

时间:2024-01-10 08:13:12

相关推荐

android组件化数据生命周期 Android组件化开发实践(七):开发常见问题及解决方案...

我们在单一工程里开发时代码运行良好,但是在进行组件化开发时,经常会出现一些莫名其妙的问题。

1. ButterKnife无法使用

组件化之后,在library中使用ButterKnife,会发现引用R.id的地方都会飘红报错:

查看错误原因都是:Attribute value must be constant。这是因为在library中生成的R文件,这些属性值都不是常量,而@BindView注解这里是需要传入常量值的,我们找到R.id类看看:

从图中可以看到,这些id都是 public static int 类型的,所以这些地方都会报错,ButterKnife提供了插件来解决这个问题。

在项目的build.gradle里增加配置:

dependencies {

classpath 'com.android.tools.build:gradle:3.0.1'

classpath 'com.jakewharton:butterknife-gradle-plugin:8.4.0'

}

注意gradle使用的版本号为3.0以上,butterknife-gradle-plugin的版本号为8.4.0,特别注意不要使用最新的版本,8.4.0刚刚好,否则总是编译报错。

在module的build.gradle里声明插件:

apply plugin: 'com.jakewharton.butterknife'

在module的build.gradle里增加依赖:

compile 'com.jakewharton:butterknife:8.4.0'

annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'

使用R2而不是R

我们看看R2文件里的id,发现里面都是public static final int类型常量值了,这些都是是插件为我们生成。

click事件

同样,click事件里也必须采用R2.id来替换R.id,但是onClick()方法里不能使用switch case语句,必须使用if else来代替,在方法体内部是不能使用R2.id的,R2类只限于在外部注解中使用。

2. 组件生命周期自动注册加载

在组件生命周期管理这篇文章中,我介绍了组件都有一个自己的类似Application类,但是会引入一个问题:在壳工程集成各种业务组件时,会存在硬编码的问题,耦合严重,违背了组件化的初衷。为了解决该问题,我们可以采用APT技术,以及通过自定义gradle插件,在打包编译期间通过动态插入字节码的方式,实现组件生命周期类的自动注册加载。具体实现方式可参考:Android组件化开发实践(八):组件生命周期如何实现自动注册管理。

3. 不同组件间数据如何交互

TODO...

持续更新中...

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。