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

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...

持续更新中...

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

  1. android组件化数据生命周期,Android组件化开发实践(五):组件生命周期管理

    每个Android应用启动时,都会先创建一个Application.通常在Application里我们会做一些应用初始化的操作,常见的有第三方SDK初始化.在应用组件化之后,组件与壳工程是隔离开来的, ...

  2. android应用程序的生命周期,Android应用程序的生命周期.doc

    Android应用程序的生命周期.doc Android应用程序的生命周期 描述:程序的生命周期是在Android系统中进程从启动到终止的所有阶段,也就是Android从启动到停止的全过程.==程序的 ...

  3. android中应用程序生命周期,Android应用程序生命周期中的活动和图标

    面向大众的移动技术,第3部分 为您的Android移动应用程序添加导航样式 安德鲁·格洛弗 2013年7月25日发布 面向大众的移动技术 请期待本系列的后续内容. 请期待本系列的后续内容. 近年来,移 ...

  4. android启动服务的生命周期,android Service启动运行服务 生命周期

    Service Android中的service类似于windows中的service,service一般没有用户操作界面,它运行于系统中不容易被用户发觉, 可以使用它开发如监控之类的程序. 一.步骤 ...

  5. android启动服务的生命周期,Android Service的两种启动方式以及生命周期

    Service的两种启动方式: 1.startService 2.bindService 注意: .在Android 5.0之后google出于安全的角度禁止了隐式声明Intent来启动Service ...

  6. android activity跳转生命周期,Android中从一个Activity跳转到另一个Activity所经历的生命周期........

    凡是Android开发人员都知道"Activity"是非常重要的:对其该"Activity"生命周期相信大家也比较熟悉了. 这篇文章主要探讨的是"从一 ...

  7. Android四大基本组件介绍与生命周期

    Android四大基本组件分别是Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器. 一:了解四大基本组件 Activity ...

  8. Android基础_1 四大基本组件介绍与生命周期

    Android四大基本组件分别是Activity,Service(服务),Content Provider(内容提供者),BroadcastReceiver(广播接收器). 一.四大基本组件 Acti ...

  9. 用生命周期规范组件化流程

    写在前面 1. 组件划分 架构 宿主壳.调试壳 组件层 基础层 MVC.MVP.MVVM 如何下沉 Utils 规范:使用 Kotlin 静态方法 单例模式 res 规范:命名清晰 string.xm ...

  10. 国内android应用商城中程序隐私泄露分析,基于数据生命周期的Android应用程序隐私泄露分析技术研究...

    摘要: 目前,随着智能手机应用市场的发展与成熟,用户在方便地使用各类型应用的过程中亦会产生大量隐私数据,隐私泄露已成为智能手机平台的一个严重安全问题.由于Android平台的开放性,该问题更为突出,不 ...

最新文章

  1. jQuery开发技巧
  2. 【递推DP】POJ1163The Triangle
  3. AppWidgetServiceImpl: Widget Error: widget.host.callbacks is null
  4. 查询2021抚顺高考成绩,2021年抚顺高考状元是谁分数多少分,历年抚顺高考状元名单...
  5. centOS 7下安装与配置heartbeat高可用集群
  6. 鸿蒙轻内核M核的故障管家:Fault异常处理
  7. 预训练新范式!为什么Prompt会更有效?
  8. eclipse没有server选项怎么解决
  9. easyui关于validatebox实现多重规则验证的实践
  10. 记一次LiteIDE因为Delve版本太低无法Debug的处理
  11. 杭州电子科技大学acm--2017
  12. webstorm直接运行js
  13. 算法训练营 day20 二叉树 最大二叉树 合并二叉树 二叉搜索树中的搜索 验证二叉树
  14. blender2.8 bpy.data.images.new创建的图片返回值撤回操作后丢失
  15. EXCEL 公式中 sheet名字 用 单元格值 代替
  16. js如何取到ajax回调函数值,js怎样获取调用回调函数的参数值
  17. java购物车后台_java开发——购物车功能如何实现
  18. The History Began from AlexNet: A Comprehensive Survey on Deep Learning Approaches
  19. 回顾第7周多行星星图
  20. firefox linux 中文字体,Ubuntu下的Firefox字体配置方案

热门文章

  1. JavaScript中B继承A的方法
  2. C#之四十二 C# 读写文本文件乱码解决方案
  3. .net EventHandler 事件处理
  4. nginx upstream配置_nginx + ingress + gunicorn 环境上传大文件报错问题的解决思路
  5. android socket_Android 10.0系统启动之Zygote进程(四)-「Android取经之路」
  6. JMJS系统总结系列----XSLT的语句规则(一)
  7. JVM 基础知识(GC)
  8. 数据结构经典问题——出栈顺序 转载至:canlynet微博
  9. 部署桌面虚拟化时要考虑的因素
  10. Notepad++安装NppFTP插件