HR:作为一个Android开发者,开源框架设计思想你搞不懂,你走吧!

HR:作为一个Android开发者,开源框架设计思想你搞不懂,你走吧!,第1张

概述前言:前段时间知乎有人问起“如何学习开源框架”这个问题,大家是如何学习开源框架的呢?一位来自阿里的大佬立马整理了下自己的思路:1:了解:先了解该开源框架是在什么背景下诞生的,主要用来解决什么问题。2:熟悉:这个开源框架的原理是什么?比如用了什么样的设计模式。比如运用了反

前言: 前段时间知乎有人问起“如何学习开源框架”这个问题,大家是如何学习开源框架的呢?

一位来自阿里的大佬立马整理了下自己的思路:

1: 了解:先了解该开源框架是在什么背景下诞生的,主要用来解决什么问题。

2: 熟悉:这个开源框架的原理是什么?比如用了什么样的设计模式。比如运用了反射机制。

3: 思考:如果让你来设计这样的开源框架, 你如何设计?很多框架都很笨重,你是否能按照自己的设计弄一个轻量级的。做这一步的目的是让自己带着问题去学习开源框架,不然看着看着就云里雾里了。

4: 深入:下载开源框架的源代码,运行一个Demo,找到框架的入口,使用deBUG模式,断点看源代码的执行流程。

5: 总结:总结该开源框架的优点和缺点是什么。我想到这个阶段你可以说是精通该开源框架。

其他技巧:

有一定能力的技术人员先看DEMO 文档太多很容易看晕。

先看框架的外层,再看内层。逐层学习。

多画图,将信息结构化。

多总结,将信息由多变少。

实战应用:(组件化框架)

一,创建工程

1,APP空壳工程

通过AndroIDStudio创建一个APP空壳工程,如图:

APP空壳工程

然后在 APP 工程添加依赖具体业务组件 Module。比如:

依赖关系

2,具体业务组件Module

需要遵循一定组件命名规范,为何需要规范呢,因为需要通过组件命名规范来约束和保证组件的统一性和一致性,避免出现冲突。比如登陆组件,那么名称:b(类型)-ga(部门缩写)-login(组件名称),这就是我们基于共同的约定进行命名的,为后期维护和扩展都带来辨识度。

Login业务组件

二,业务组件配置文件

1,build.gradle配置文修改。如下:

<pre language="JavaScript" code_block="true">if (isModule.toBoolean()) {    apply plugin: 'com.androID.application'} else {    apply plugin: 'com.androID.library'}androID {    compileSdkVersion rootProject.ext.compileSdkVersion    buildToolsversion rootProject.ext.buildToolsversion    defaultConfig {        minSdkVersion rootProject.ext.minSdkVersion        targetSdkVersion rootProject.ext.targetSdkVersion        if (isModule.toBoolean()) {            applicationID "com.hik.ga.business.login"            versionCode 1            versionname "1.0"        } else {            //ARouter            javaCompileOptions {                annotationProcessorOptions {                    arguments = [ modulename : project.getname() ]                }            }        }    }    sourceSets {        main {            if (isModule.toBoolean()) {                manifest.srcfile 'src/main/module/AndroIDManifest.xml'            } else {                manifest.srcfile 'src/main/AndroIDManifest.xml'                //集成开发模式下排除deBUG文件夹中的所有Java文件                java {                    exclude 'deBUG/**'                }            }        }    }    buildTypes {        release {            MinifyEnabled false            proguardfiles getDefaultProguardfile('proguard-androID.txt'), 'proguard-rules.pro'        }    }}dependencIEs {    implementation project(':b-ga-common-function-comlib')    if (!isModule.toBoolean()) {        annotationProcessor "com.alibaba:arouter-compiler:${rootProject.annotationProcessor}"    }}

这里需要有几点说明一下:

1,通过 isModule.toBoolean() 方法来进行组件间集成模式和组件模式的切换,包括模块是属于Application 还是 library,由于集成了 ARouter,所以需要对 ARouter 配置文件进行处理。

2,如果组件模式下, 则需要重新设置 AndroIDManifest.xml 文件,里面配置新的Application路径。比如Login组件单独运行 AndroIDManifest 清单文件

<pre language="JavaScript" code_block="true"><manifest xmlns:androID="http://schemas.androID.com/apk/res/androID"    package="hik.ga.business.applogin" >    <application        androID:name="deBUG.LoginApplication"        androID:allowBackup="false"        androID:icon="@mipmap/ic_launcher"        androID:label="@string/login_btn_str"        androID:supportsRtl="true"        androID:theme="@style/theme.AppCompat.light.NoActionbar">        <activity            androID:name="hik.ga.business.applogin.login.vIEws.LoginActivity"            androID:label="@string/login_btn_str"            androID:launchMode="singletop"            androID:screenorIEntation="portrait"            androID:theme="@style/Apptheme.NoActionbarFullScreen">            <intent-filter>                <action androID:name="androID.intent.action.MAIN" />                <category androID:name="androID.intent.category.LAUNCHER" />            </intent-filter>        </activity>    </application></manifest>

3,实现组件全局应用配置类,这个类的目的是在组件加载时初始化一些组件自身的资源,如下:

<pre language="JavaScript" code_block="true">public class LoginApplicationDelegate implements IApplicationDelegate {    private static final String TAG = "LoginApplicationDelegate";    @OverrIDe    public voID onCreate() {        EFLog.d(TAG, "*------------------onCreate()---------------->");    }    @OverrIDe    public voID enterBackground() {        EFLog.d(TAG, "*------------------enterBackground()---------------->");    }    @OverrIDe    public voID enterForeground() {        EFLog.d(TAG, "*------------------enterForeground()---------------->");    }    @OverrIDe    public voID receiveRemoteNotification(Map<String, String> message) {        EFLog.d(TAG, "receiveRemoteNotification msg = " + message);    }    @OverrIDe    public voID onTerminate() {        EFLog.d(TAG, "*------------------onTerminate()---------------->");    }    @OverrIDe    public voID onConfigurationChanged(Configuration configuration) {        EFLog.d(TAG, "*------------------onConfigurationChanged()---------------->");    }    @OverrIDe    public voID onLowMemory() {        EFLog.d(TAG, "*------------------onLowMemory()---------------->");    }    @OverrIDe    public voID onTrimMemory(int var1) {        EFLog.d(TAG, "*------------------onTrimMemory()---------------->");    }}

三,路由服务

1,定义公共组件路由API和入口,通过路由服务组件查找,如图:

公共路由服务

2,组件路由实现

每个组件对外提供什么能力,首先需要在路由服务组件创建一个接口文件,如下是登陆组件接口声明和实现。

Login 接口:

定义Login接口

具体实现:

Login接口具体实现

路由使用:比如我们想从设置页面跳转到登陆页面,使用 Login 接口里的方法,使用如下:

<pre language="JavaScript" code_block="true">ILoginProvIDer loginService = (ILoginProvIDer) ARouter.getInstance().build(RouterPath.ROUTER_PATH_TO_LOGIN_SERVICE).navigation();if(loginService != null){    loginService.accountTologin(AccountActivity.this);}

当然,光有这些思路和搞懂单个知识的应用是还远远不够的,在AndroID开源框架设计思想中的知识点还是比较多的,想要搞懂还得学会整理和规划:我们常见的**AndroID热修复框架、插件化框架、组件化框架、图片加载框架、网络访问框架、RxJava响应式编程框架、IOC依赖注入框架、最近架构组件Jetpack等等AndroID第三方开源框架,**这些都是属于AndroID开源框架设计思想的。如下图所示:

这位阿里P8大佬针对以上知识点,熬夜整理出了一本长达1042页的完整版如何解读开源框架设计思想pdf文档,内容详细,把AndroID热修复框架、插件化框架、组件化框架、图片加载框架、网络访问框架、RxJava响应式编程框架、IOC依赖注入框架、最近架构组件Jetpack等等AndroID第三方开源框架这些知识点从源码分析到实战应用都讲的简单明了。

由于文档内容过多,篇幅受限,只能截图展示部分,更为了不影响阅读,这份文档已经打包在GitHub,有需要的朋友可以直接点此处前往免费下载。

1042页完整版解读开源框架设计思想pdf文档点击我就可以免费获取了,喜欢的朋友不要忘了给文章点个赞哦。

整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~

你的支持,我的动力;祝各位前程似锦,offer不断!!!

更多Android相关资料可点此处获取。

总结

以上是内存溢出为你收集整理的HR:作为一个Android开发者,开源框架设计思想你搞不懂,你走吧!全部内容,希望文章能够帮你解决HR:作为一个Android开发者,开源框架设计思想你搞不懂,你走吧!所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1043070.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存