Android组件化基础

组件化:

组件(功能导向):单一的功能 组件,如视频组件,支付组件,路由组件

模块(业务导向):独立的业务模块,如首页模块,直播模块,IM模块。

粒度上,模块大于组件,二者思想一致:代码复用,业务解耦

组件化优势:

1.避免重复造轮子,提高复用性,节约成本,提升开发效率。

2.项目间共用组件,可以确保整体技术的统一性。

3.为插件化共用一套底层模型做准备。

模块化优势:

1.业务解耦,移植简单。

2.多团队可以根据业务并行开发和测试。

3.单个业务可以独立打包,提高编译速度。

4.多项目共用模块,降低开发成本。

AndroidManifest:

APP最终只允许一个AndroidManifest,众多module均有AndroidManifest会合并的,合并原则:

1.Activity:

合并后会自动补全一些属性:icon,theme等,且name路径会改为全路径(包名+文件名),直接 android:name =".im.ChatActivity"的形式,有可能导致找不到文件。

2.Application:

1.主module无自定义application,功能module有自定义application,引用功能module中的自定义application;

2.主module和功能module均有自定义application,解决冲突,最终引用 主module中的自定义application;

3.权限声明:

最后汇总,会剔除不同功能module之间重复申请的权限,别担心重复申请,每个权限只会申请一次的。也可以把权限全部写到BaseModule中。

4.主题声明:

Activity主题各模块独立,用模块自己的定义的主题,不定义就是默认;

Application theme主题,参考最终full AndroidManifest中的主题。

5.Service:

与Activity相同。

6.shareId:

通过声明SharedUserId,拥有同一个UserId的多个app可以配置成运行在同一个进程中,所以默认可以互相访问任意数据。

但是功能module中声明都是白扯,只有在主module(Application module)中声明shareUserId才能被打包到full AndroidManifest中。

Application介绍:

application比activity创建的早,且生命周期最长,单例存在。

重要方法介绍:

onCreate()早于activity创建;

onTerminate()程序终止时调用,但不一定会被调用,系统杀死app时,不会提醒,也不会调用该方法;

onLowMermory()后台程序已终止,且资源仍匮乏时,会调用该方法,一般来说,在这里会释放一些不必要的资源占用,来应付紧张。

onConfigurationChanged()配置改变时触发,最常见的就是旋转屏幕。

最重要的方法:App内所有Activity的生命周期的监听

registerActivityLifecycleCallbacks()和unregisterActivityLifecycleCallbacks()

例如获取栈顶Activity对象。(对于dialog至关重要)

组件化中,多个module均有application,编译时会报错,AS的Gradle插件默认会启用Manifest Merger Tool,如果Library中也定义了与主项目相同的属性(例如默认生成的icon和theme)合并就会失败。

解决编译,失败可以使用tools :replace = “android:icon,android:theme”,注意多个属性用逗号分开。并且在Manifest根标签加上 xmlns:tools=“http://schemas.android.com/tools”。否则会找不到域名。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章