『网易实习』周记(二)
『网易实习』周记(二)
本周知识清单
- gradle知识
- Application,Acitivity,AppcompatActivity的区别
- 组件化项目搭建
gradle指南
自己在公司看公司源码的时候,发现公司源码都是组件化的搭建,然后配置文件里面都是gradle来构建自动化,然自己之前学习并没有很深入的去学习,这次趁机去了解这个gradle了。Gradle 并不仅仅是一个语言,而是一套构建工具。在早期,软件构建只有编译和打包等简单需求,但软件开发的发展,现在的构建变得更加复杂。而构建工具就是在这一背景下衍生出来的工具链,它能够帮助开发者可重复、自动化地生成目标产物。然后对于我来说自己最近也得准备秋招,关于这些进阶的东西学习不是很深刻,以后有时间再回来恶补,关于Gradle学习推荐学习:
- 要点提炼| Gradle指南
- 《Android Gradle权威指南》
关于《Android Gradle权威指南》我自己也是打算去看的,等我秋招上岸,必须安排。
Application,Acitivity,AppcompatActivity的区别
Application
- Application是维护全局状态的基类,Android系统会在启动应用进程时创建一个Application对象。application里面的对象变量是属于整个系统的。
- 在启动程序时会创建application对象,所以Application对象诞生于其他任何组件对象之前,并且一直存活,直到应用进程结束。
- 默认情况下系统会为每个应用分配一个进程,进程的名称就是每个项目的包名,当进程启动的时候,系统会创建application对象,并调用对象的onCreate函数。
- application在项目运行过程中不会改变,而activity在切换过程中,会有不断的创建和销毁,服务切换也是创建和销毁,但是application不会改变
- Application对象由Android系统管理,其回调函数都运行于UI线程即主线程,
- 回调函数有onCreate,onConfigurationChanged即系统配置变更,包括屏幕方向变化,系统语言变化等,onLowMemory释放内存
- application对象全局可访问,且全程陪同应用进程,适合共享全局状态,初始化全应用所需的服务。
- 静态单例也可以实现全局状态的共享
- 在组件化的项目中,
extends Application
在他当oncreate
方法中都会做一些初始化工作
MainActivity extends AppCompatActivity与extends Activity的区别
public class MainActivity extends AppCompatActivitypublic class MainActivity2 extends Activity
问:AppCompatActivity和Activity有什么区别,Android studio从启动到创建MainActivity的时候就自动extends AppCompatActivity,为什么不extends Activity?
答:AppCompatActivity是继承自v4包的FragmentAvtivity,并且加入了很多新特性。这个可以很好的兼容老设备。
AppCompatActivity 和 Activity 的区别主要体现在app运行后的界面(app name显示或者不显示),对程序本身没有影响。
继承AppCompatActivity后的运行界面
继承了Activity后的运行界面
差了明显的一个Label也就是项目的标签。标签的文字来源于AndroidManifest.xml中application中的android:label 如果继承的是Activity那这个标签的内容不会显示出来。
组件化项目搭建
为什么要使用组件化
- 查找问题慢:定位问题,需要在多个代码混合的模块中寻找和跳转。
- 开发维护成本增加:避免代码的改动影响其它业务的功能,导致开发和维护成本不断增加。
- 编译时间长:项目工程越大,编译完整代码所花费的时间越长。
- 开发效率低:多人协作开发时,开发风格不一,又很难将业务完全分割,大家互相影响,导致开发效率低下。
- 代码复用性差:写过的代码很难抽离出来再次利用。
组件化的优势
组件化基于可重用的目的,将应用拆分成多个独立组件,以减少耦合:
- 加快编译速度:每个业务功能都是一个单独的工程,可独立编译运行,拆分后代码量较少,编译自然变快。
- 解耦:通过关注点分离的形式,将App分离成多个模块,每个模块都是一个组件。
- 提高开发效率:多人开发中,每个组件模块由单人负责,降低了开发之间沟通的成本,减少因代码风格不一而产生的相互影响。
- 代码复用:类似我们引用的第三方库,可以将基础组件或功能组件剥离。在新项目微调或直接使用。
组件分层
组件化搭建过程
1·新建一个工程
2·构建模块
建议:
- 第一种:module是能在library和application之间切换
- 第二周:module只能是library
新建四个module
组件的依赖关系是:
我们都知道,android的项目构建是用gradle,我们使用组件化项目,每个人开发的组件build.gradle配置就得一样,不然就得寄,当然这些模块,我们怎么改呢,很显然,我们在根的build.gradle文件配置一个ext 文件,其他的module的build.gradle就去读取根的build.gradle文件配置就大功告成
改根的build.gradle文件配置
改libBase的build.gradle文件配置
改login的build.gradle文件配置
改main的build.gradle文件配置(直接放配置文件)
def cfg = rootProject.extif (cfg.isDebug) {apply plugin: 'com.android.application'
} else {apply plugin: 'com.android.library'
}android {compileSdk cfg.android.compileSdkVersiondefaultConfig {if (cfg.isDebug) {applicationId cfg.applicationId.login}minSdk cfg.android.minSdkVersiontargetSdk cfg.android.targetSdkVersionversionCode cfg.android.versionCodeversionName cfg.android.versionNametestInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"}buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'}}compileOptions {sourceCompatibility JavaVersion.VERSION_1_8targetCompatibility JavaVersion.VERSION_1_8}sourceSets {main {if (cfg.isDebug) {manifest.srcFile 'src/main/debug/AndroidManifest.xml'} else {manifest.srcFile 'src/main/AndroidManifest.xml'}}}
}dependencies {implementation project(':modulesBase:libBase')testImplementation 'junit:junit:4.13.2'androidTestImplementation 'androidx.test.ext:junit:1.1.3'androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}
- 改moudlePay的build.gradle文件配置(直接放配置文件)
def cfg = rootProject.extapply plugin: 'com.android.library'
android {compileSdk cfg.android.compileSdkVersiondefaultConfig {minSdk cfg.android.minSdkVersiontargetSdk cfg.android.targetSdkVersionversionCode cfg.android.versionCodeversionName cfg.android.versionNametestInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"}buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'}}compileOptions {sourceCompatibility JavaVersion.VERSION_1_8targetCompatibility JavaVersion.VERSION_1_8}}dependencies {implementation project(':modulesBase:libBase')testImplementation 'junit:junit:4.13.2'androidTestImplementation 'androidx.test.ext:junit:1.1.3'androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}
3·配置路由
Android 中的界面跳转那是相当简单,但是在组件化开发中,由于不同组件式没有相互依赖的,所以不可以直接访问彼此的类,这时候就没办法通过显式的方式实现了。
所以在这里咱们采取更加灵活的一种方式,使用 Alibaba 开源的 ARouter 来实现。
一个用于帮助 Android App 进行组件化改造的框架 —— 支持模块间的路由、通信、解耦
ext 文件已经配置了依赖
至此路由配置完成。
推荐阅读:Android 手把手带你搭建一个组件化项目架构
CSDN demo:https://download.csdn.net/download/weixin_45882303/86261212
『网易实习』周记(二)相关推荐
- 『网易实习』周记(三)
『网易实习』周记(三) 本周知识清单: kotlin基础 jar包和arr包的区别 分析Google的MVVM架构的案例 LiveData与MutableLive的区别 kotlin lamda语法 ...
- 『网易实习』周记(四)
『网易实习』周记(四) 文章目录 『网易实习』周记(四) Android卡顿检测及优化 帧率 VSync 识别卡顿 使用dumpsys gfxinfo 使用systrace 使用BlockCanary ...
- 『网易实习』周记(一)
『网易实习』周记(一) 来实习公司有一周多了,从熟悉工作环境到业务到参与项目这段时间,真的受益匪浅,get到很多新知识,也发现自己知识储备上的不足,特此开一个专题"实习随笔"来回顾 ...
- 『算法实习』周记(二)
本周对于三维坐标系的理解更深了一步.在坐标系转换的过程中,其实代码就那么几行,但是呈现的效果完全是不同的. 本周知识清单: 注释格式 三维坐标系转换 注释格式 因为我过去用VS比较少,一直也是自己单打 ...
- 在内卷如此严重的当下,大二小伙逆流而上,首次参加校招成功拿到网易实习offer
前言 楼主今年大二,本科双非,之前有过竞赛经验,首次参加校招,一共参加了网易和百度,滴滴,最后选择了去网易实习! 作者为大家整理了很多资料!包括一线大厂Java面试题总结+各知识点学习思维导+一份30 ...
- 『中级篇』容器的技术概述(二)
原创文章,欢迎转载.转载请注明:转载自IT人故事会,谢谢! 原文链接地址:『中级篇』容器的技术概述(二) 容器的前世今生 物理机 部署非常慢 购买服务器服务,放在IDC机房,各种走流程,很多流程不可控 ...
- 『程序员』 [求职招聘]软件测试面试题,高手帮忙!!
『程序员』 [求职招聘]软件测试面试题,高手帮忙!! 作者:janny161 提交日期:2005-12-8 19:32:18 楼主 有100个金币,其中有一个比较轻.给你一个天平,怎样用四次天 ...
- [日推荐]『保养汽车』爱车的专职管家
2019独角兽企业重金招聘Python工程师标准>>> 你的爱车需要做保养啦! 想要挑一个优惠力度大.口碑好的4S店,又嫌电话预约太麻烦? 这个小程序你一定会爱不释手-- 保养汽车 ...
- 2017-2018-2 165X 『Java程序设计』课程 助教总结
2017-2018-2 165X 『Java程序设计』课程 助教总结 本学期完成的助教工作主要包括: 编写300道左右测试题,用于蓝墨云课下测试: 发布博客三篇:<2017-2018-2 165 ...
最新文章
- hdu 2897 巴什博弈变形
- 《Xcode实战开发》——1.2节参与计划
- 迪拜与IBM合作推出基于区块链的商业注册系统
- C++学习之路: 单例模板
- QT Media Error: DirectShowPlayerService::doRender: Unresolved error code 0x80040266
- 菜单之一:Menu基础内容
- 配置文件管理服务器,06-配置文件管理
- 大数据没用?!张小龙:我们很少看统计数据!
- 公众号向特定用户主动推送消息_SAP系统和微信集成的系列教程之三:微信用户关注公众号之后,自动在SAP C4C系统创建客户主数据...
- 爱立信CEO:全球芯片短缺可能持续到2022年
- js控制数量包含截取
- Linux+Apache+PHP+MySQL服务器环境(CentOS篇)
- GDAL 2.0版本RPC校正速度测试
- android 布局图片缩放,Android中进行图片缩放显示
- 无穷级数求和7个公式_数字、数论、数列、级数
- 移动辟谣飞信下线:飞信未来仍将大有作为
- 小程序跳转公众号关注页面的两种方法
- 阿里10年:一个普通技术人的成长之路
- KNN最近邻算法理解
- linux面试题_全网最新、最全Linux面试题(2020版)!