自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(56)
  • 资源 (1)
  • 收藏
  • 关注

原创 Android专属JVM讲解—【运行时数据区详解】

前言JVM是什么?学了JVM有什么好处?以及运行时数据区是什么?在本篇中将会一个一

2022-01-17 13:36:07 2364

原创 Android—Flow与Jetpack Paging3

前言在上一篇中,主要讲解了Jetpack—Paging2的故事。因为Paging3改动较大,并且为了让更多人同时适应两个版本,因此在本篇中将会结合Flow与Paging3进行组合讲解。

2021-12-26 17:56:54 1068 1

原创 Android—Jetpack-Paging组件详解

前言在前几篇中,主要讲解了Jetpack其他组件相关,在本篇中,将会对Paging组件进行讲解。

2021-12-20 22:26:17 1239

原创 Android—Kotlin协程Flow综合应用

前言在前几篇中,已经讲解了Flow相关的基础知识。在本篇中,将会开启几个小实战来巩固之前所讲解的知识点。

2021-12-16 11:32:11 3124 1

原创 Android—kotlin—Channel超详细讲解

前言在上一篇,主要讲解了关于Flow异步冷流相关的知识点。在本篇中将会讲解Channel通道(热流)相关的知识点!

2021-12-15 15:50:56 3759 2

原创 Android—Kotlin-Flow异步流超详细讲解

前言本来这一篇准备写Jetpack对应的paging的,但在整理资料的时候,发现Kotlin还有Flow未讲解,这个也是一大重点,因此本篇将对Flow进行详解!

2021-12-10 17:20:03 5919 2

原创 Android—Jetpack教程(九)

前言在上一篇中,主要讲解了Jetpack对应Navigation组件,在这一篇中,将会对应WorkManager进行详解!

2021-12-08 10:19:17 906

原创 Android—Jetpack教程(八)

前言在上一篇中对应Jetpack对应的Navigation进行了初步讲解。在本篇中,将会讲解对应的NavigationUI以及DeepLink相关内容!1、NavigationUI1.1 NavigationUI的作用Fragment的切换,除了Fragment页面本身的切换,通常还伴有App bar的变化。为了方便管理,Navigation组件引入了NavigationUI类1.2 示例一对应navigation如图所示这里有两个Fragment,没有任何操作,对应Framgnet

2021-11-30 18:13:30 2115

原创 Android—Jetpack教程(七)

前言在上一篇中,已经将Jetpack对应的Room讲解完毕。在本篇中将会开启Navigation初步讲解!1、认识Navigation1.1 Navigation的诞生Activity嵌套多个Fragment的UI架构模式已经非常普遍,但是对Fragment的管理一直是一件比较麻烦的事情。我们需要通过FragmentManager和FragmentTransaction来管理Fragment之间的切换。页面的切换通常包括对应用程序App Bar的管理、Fragment间的切换动画,以及Fragme

2021-11-29 16:50:54 2145 1

原创 Android—Jetpack教程(六)

前言在上一篇中,对Room进行了ViewModel+LiveData封装。在本篇中,将会讲解Room对应的升级与预填充。直接开始吧!1、预填充数据库如图所示有时候我们希望应用自带一些数据供我们使用,我们可以讲数据库文件放入assets目录一起打包发布,在用户首次打开App时,使用createFromAsset()和createFrimFile()创建Room数据库。如图所示既然要自带一些数据,那么我们预先准备一些数据存入自带数据库里面。那看看如何使用?@Database(entities

2021-11-28 23:55:14 1674

原创 Android—Jetpack教程(五)

前言在上一篇中,对Jetpack里面的Room进行了初步的使用,但每次操作数据后需要额外查询一次。在本篇中,将会对Room以及前面所学的进行一个整合。话不多说,直接开始!1、Room+ViewModel+LiveData如图所示这是官方推荐我们使用的架构,ViewModel和Repository交互Repository与对应的数据库、网络请求交互在上一篇的基础上,对应Room数据库相关的暂且不动。因为数据库和Repository相互关联,而Repository又与ViewModel相

2021-11-27 16:58:26 1249

原创 Android—Jetpack教程(四)

前言在上一篇中,重点讲解了Jetpack里面的DataBinding组件。在本篇中,将会讲解Jetpack对应的Room组件。1、Room介绍那么何为Room?Android采用SQLLite作为数据库存储,开源社区常见的(ORMObject Relational Mapping)库有ORMLite、GreemDAO等。Room和其他库一样,也是在SQLLite上提供了一层封装。Room重要概念Entity: 实体类,对应的数据库的一张表结构,使用注解@Enity标记Dao: 包含访问一系列

2021-11-26 22:08:39 1847

原创 Android—Jetpack教程(三)

前言在上一篇中,对Jetpack里面的ViewModel以及LiveData进行了详解。在本篇中,将会对DataBinding进行详解!那么DataBinding有什么作用呢?让布局文件承担了部分原本属于页面的工作,使页面与布局耦合度进一步降低!不过要想是用DataBinding功能,需要在对应AppModule的build.gradle开启dataBinding功能:android { //...略 defaultConfig { //...略 dataBinding { //

2021-11-25 18:58:52 1114

原创 Android—Jetpack教程(二)

前言在上一篇中,对Jetpack有了初步的认知,也详细讲解了LifeCycle的实际使用。在本篇中,将会对Jetpack对应的ViewModel进行详解!1、ViewModelViewModel诞生之前出现的问题:瞬态数据丢失异步调用的内存泄露类膨胀提高维护难度和测试难度ViewModel的作用如图所示它是介于View(视图)和Model(数据模型)之间的桥梁使视图和数据能够分离,也能保持通信ViewModel的生命周期特性如图所示我们看到:ViewModel的生命

2021-11-24 16:26:48 1403

原创 Android—Jetpack教程(一)

前言Jetpack的热度,想必大家有目共睹!现在越来越多的公司招聘要求Jetpack是必会项目,Google也在疯狂的更新Jetpack组件,热度完全不亚于Kotlin!所以说呢?还不卷起来么?那么Jetpack是什么呢?1、初始Jetpack1.1 什么是Jetpack?如图所示Jetpack是一个由多个库组成的套件,可帮助开发者遵循最佳做法,减少样板代码并编写可在各种Android版本和设备中一致运行的代码,让开发者精力集中编写重要的代码。1.2 为何使用Jetpack?遵循最佳做法

2021-11-23 17:00:12 3611

原创 Android—Gradle教程(九)完结篇

前言到目前为止,Gradle基础以及Kotlin基础讲解完毕。因此,在本篇里,将会以Gradle的构建优化以及如何从Groovy迁移到KTS进行详解!话不多说,直接开始!1、Gradle构建优化优化都是些配置,快速过一下就行了!重点在迁移KTS1.1 并行编译开启默认情况下Gradle处理多模块时,往往是挨个按顺序处理。在项目根目录下面的gradle.properties中设置开启并行编译,提升编译速度:org.gradle.parallel=true1.2 开启编译守护进程 (默认开启)

2021-11-22 17:50:19 2427 6

原创 Android—Kotiln进阶教程(五)

前言在上一篇中对Kotlin协程里的调度器进行对应的讲解。在本篇中,将会对Kotlin协程对应上下文相关的知识点进行讲解。1、上下文中的作业协程的 Job 是上下文(CoroutineContext )的⼀部分,并且可以使⽤ coroutineContext [Job] 表达式在上下⽂中检索它:fun main() = runBlocking<Unit> { val job = launch { println("My job is ${coroutineCont

2021-11-21 17:23:18 839

原创 Android—Kotiln进阶教程(四)

前言在上一篇中,讲解了关于Kotlin协程对应的释放资源、超时、组合挂起函数相关知识点。在这一篇中,将会讲解Kotlin协程对应的同步,以及初探协程上下文以及调度器。话不多说,直接开始!先看上一篇例子suspend fun doSomethingUsefulOne(): Int { println("doSomethingUsefulOne") //所有kotlinx.coroutines中的挂起函数都是可被取消的。 delay(1000L) return 13}

2021-11-20 17:42:43 582

原创 Android—Kotiln进阶教程(三)

前言在上一篇中,对Kotlin协程对应取消组合挂起函数进行了初步的认识。在这篇中,将会讲解Kotlin协程对应的释放资源、超时、组合挂起函数相关知识点!话不多说,直接开始!先看上一篇的例子:fun main() = runBlocking<Unit> { val job = launch { repeat(1000){ i -> println("job:I'm sleeping $i") delay(10L)

2021-11-19 16:26:40 791

原创 Android—Kotiln进阶教程(二)

前言在上一篇中,对Kotlin协程进行了初步认识。在这篇中,将会讲解Kotlin对应取消超时组合挂起函数!话不多说,直接开始!1、提取函数重构先看上一篇的例子:fun main() = runBlocking<Unit> {// this : CoroutineScope launch { delay(1000L) println("Kotlin!") } println("Hello,")}这是上一篇的例子,这里我们看到在

2021-11-18 17:22:40 398

原创 Android—Kotiln进阶教程(一)

前言在前面的文章中,已经讲解了Kotlin基础相关的知识点。从这一篇开始,将开始对Kotlin对应的协程进行详解!话不多说,直接开始!????1、Kotlin基本使用 ????class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentVi

2021-11-17 18:25:08 877

原创 Android—Kotiln基础教程(九)

前言在上一篇中,主要讲解了Kotlin对应的函数式编程。在这一篇中,将会讲解Kotlin与Java之间的相互调用!话不多说,直接开始!1、Kotlin调用Java1.1 属性读写操作进入TestJavapublic class TestJava { public int getHitPoints() { return hitPoints; } public void setHitPoints(int hitPoints) { this.h

2021-11-16 17:08:37 1197

原创 Android—Kotiln基础教程(八)

前言在上一篇中主要讲解了Kotlin对应的泛型、扩展函数的知识点。在这一篇中,将会讲解Kotlin里面的函数式编程。

2021-11-15 16:44:10 1588

原创 Android—Kotiln基础教程(七)

前言在上一篇中,讲解了Kotlin对应的对象,接口,抽象类相关的知识点。在这一篇中,将会讲解Kotlin对应的泛型、扩展函数。话不多说,直接开始!1. 泛型1.1 单泛型参数open class Human(val age: Int)class Boy(val name: String, age: Int) : Human(age)class Man(val name: String, age: Int) : Human(age)class Dog(val weight: Int)cl

2021-11-14 16:48:57 938 1

原创 Android—Kotiln基础教程(六)

前言在上一篇中,讲解了Kotlin关于对象的基础知识,在这一篇中,将会讲解Kotlin对应的对象,接口,抽象类相关的知识点。1. 类的单例1.1 示例一object ApplicationConfig { init { println("loading config ...") } fun setSomeThing() { println("setSomething") }}fun main{ ApplicationC

2021-11-13 17:57:52 933

原创 Android—Kotiln基础教程(五)

前言在上一篇中主要讲解了Kotlin关于集合相关的知识点,在本篇中,将会对Kotlin的对象进行详解!1. 对象1.1 示例一(无构造函数)class Player { //分析点1 var name = "abc" get() = field.capitalize() set(value) { field = value.trim() } var age = 10 get() = fiel

2021-11-12 15:23:02 1024

原创 Android—Kotiln基础教程(四)

前言在上一篇中,主要讲解了Kotlin字符串、数字类型、标准库函数对应的知识点。在本篇中,将会讲解Kotlin集合相关的知识点。1. 只读集合val list = listOf("json", "jack", "jacky")fun main{ //只读列表 ;不能写入,不能更改属性 println(list.getOrElse(10) { "Unknown" }) println(list.getOrNull(10)) println(list.getOrNull(

2021-11-11 11:24:14 916

原创 Android—Kotiln基础教程(三)

前言在上一篇中,讲解了Kotlin对null处理以及自定义异常,在本篇中,将会以字符串、数字类型、标准库函数对Kotlin进行讲解。1. 字符串1.1 分割字符串示例一fun main() { val name="Jimmy's friend" var index=name.indexOf("\'") val str=name.substring(0 until index ) println(str)}运行效果Jimmy这没啥好说的,和java差不

2021-11-09 17:14:31 1211 1

原创 Android—Kotiln基础教程(二)

前言在上一篇中,主要是了解性的初探了Kotlin,发现了与Java还是有明显的区别的。在这一篇中将会重点以Kotlin对应的Null与异常进行详解。1. Null类型如图所示在我们定义变量的时候,如果没有赋初始值,那么编译器就会直接提示语法错误!当你准备直接赋初始值为null的时候,又会提醒你Show usages of variable 'name'。其实这个是Kotlin的特性之一。就是为了避免出现非空而设定的。毕竟变量的类型要根据变量的属性值而确定,属性值为空,它就自然不知道是什么类型的变

2021-11-08 18:16:24 638

原创 Android—Kotiln基础教程(一)

前言众所周知Kotlin已经成为Android开发必不可少的开发语言!在本专栏里,我将带你从零基础开始学习Kotlin,从基础语法的掌握到对协程的精通,让你完完全全的从Java百分百转移到Kotlin大军来!敬请期待吧!注:在Kotlin基础教程中,将会以IDEA作为编译器。本篇内容仅仅是语法的初探,不会刻意深入。先掌握最基础的,然后再循序渐进学习Kotlin。1. HelloWord学习一门语言,满满的仪式感还是要有的。fun main() { var hello="Hello w

2021-11-07 19:16:30 1176 2

原创 Android—Gradle教程(八)

前言到目前为止,Gradle基础知识已经讲解完毕,对Gradle的实战也讲解了好几个了。在本篇里,将会以Gradle在组件化的使用进行详解。1. 什么是组件化?在回答这个问题之前首先回想一下以前我们是怎么开发的。如图所示之前我们开发项目的时候,就是通过定义不同的包名来表示对应的功能,比如这里的product用来表示商品列表以及商品详情相关的业务逻辑【这部分由程序员A完成】;order用来表示订单相关的业务逻辑【这部分由程序员B完成】突然有一天,程序员A找到程序员B,怒气冲冲的说到:“你干嘛要改

2021-11-06 23:41:35 460

原创 Android—Gradle教程(七)

前言在上一篇中,就已经开始了对Gradle实战进行演练。在这一篇中,将会实现ButterKnife里面的BindView来讲解Gradle在APT自动化代码处理的实战。1. APT介绍APT(Annotation Processing Tool)即注解处理器,是一种处理注解的工具,确切的说它是javac的一个工具,它用来在编译时扫描和处理注解。注解处理器以Java代码(或者编译过的字节码)作为输入,生成.java文件作为输出。简单来说就是在编译期,通过注解生成.java文件。那么何为注解处理器?

2021-11-05 19:42:10 485

原创 Android—Gradle教程(六)

前言在前几篇文章中,已经讲AGP相关配置讲解完毕。从这一篇开始将会开启AGP实战相关的内容。本篇实战内容:AGP实战一:启用multiDex打包AGP实战二:aar打包发布maven1. AGP实战一:启用multiDex打包我们编写代码难免会导入三方资源库,几个版本过后阔能就会出现65535方法数限制这个错误。因为DexOpt会把每一个类的方法id检索起来,存在一个链表结构里面。这个链表的长度是用short类型来保存的,这就使得方法数id不能超过65535。所以说一个dex文件是不能超

2021-11-04 20:54:10 556 1

原创 Android—Gradle教程(五)

前言在上一篇中,讲解了AGP的基础配置以及多渠道打包,在这一篇中将会进一步对AGP进行讲解。1、Android{}android{},由AGP引入的其他节点:resValuebuildConfigFieldadbOptions这些节点在不会默认创建需要开发者手动定义。那么这些节点对应有什么功能呢?1.1 resValue看这个命名感觉像是资源相关的,直接上手代码看看。android{ ...略 defaultConfig { ...略 resValue 'strin

2021-11-03 15:47:38 609

原创 Android—Gradle教程(四)

前言在上一篇中已经讲到Gradle的依赖管理相关的知识点,在这一篇中将会对Gradle的配置以及产品风味进行详解。版本说明关于Andoird构建配置的相关文档,推荐官方这个文档后面讲到的Andorid构建配置都是针对的AGP4.2.0以上版本,请悉知1、android{}android{},由AGP引入的节点:compileSdkVersion:编译使用版本buildToolsVersion:buildTools版本defaultConfig:默认产品风味productFlavor

2021-11-02 16:26:57 623

原创 Android—Gradle教程(三)

前言在上一篇中,主要讲解了Gradle核心模型以及初步了解Gradle插件。在这一篇中,主要对Gradle依赖管理进行详解:1、依赖管理所谓的依赖管理:在大多数情况下,项目都要依赖lib形式的可重用功能,还有很多项目可能被切分成多个单独的子工程来构成模块系统。依赖管理是一种可以让项目自动化的定义、解析,及使用依赖的技术。而Gradle提供了强大的依赖管理支持,并且也实现了现代软件项目的各种典型场景,如下图所示:如图所示Gradle在编译构建的时候,先是从对应(本地、远程)资源库里面拿到对应的资

2021-11-01 17:23:57 1072 2

原创 Android—Gradle教程(二)

前言在上一篇文章中,对Gradle基础以及构建机制进行了详细的讲解,在这一篇中将会对Gradle核心模型以及Gradle插件进行初步讲解。1.Gradle核心模型1.1 Gradle钩子函数讲钩子函数,还是得拿出Gradle执行流程图如图所示gradle在生命周期三个阶段都设置了相应的钩子函数调用。使用钩子函数,处理自定义的构建:初始化阶段:gradle.settingsEvaluated和gradle.projectsLoaded。(在settings.gradle中生效)配置阶段

2021-10-28 18:52:58 1610 3

原创 Android—Gradle教程(一)

前言在前几篇中,讲解了Groovy的基础语法,学习新语法过程总是枯燥的,但为了更好的掌握Gradle,那就必须经过该过程。当然从这一篇将会从零基础开始,开展对Gradle的讲解。1. 掌握Gradle基础1.1 环境配置去官网下载gradle或者从本地用户文件夹下的.gradle/wrapper/dists找到本地缓存的gradle开发工具包 (注意带bin文件夹的这个grade-x.x)系统属性配置:添加GRADLE_HOME:C:\Users\sheji.gradle\wrapper\

2021-10-25 18:47:07 4252

原创 Android Gradle—Groovy动态特性及元编程

前言在上一篇中,主要讲解了Groovy类、方法与闭包详解,在这一篇中将会对Groovy 动态特性及元编程进行详解。1. Groovy 动态特性

2021-10-22 19:29:25 461

原创 Android Gradle—Groovy类、方法与闭包详解

前言在上一篇文章中,主要讲解了Gradle基本介绍以及Groovy对应的基础语法,在这一篇中将会从如下几点继续深入Groovy。Groovy类与方法Groovy闭包话不多说,直接开始。1. Groovy类与方法1.1 多种访问get/set方式class Car { def miles private def year def getMiles() { println "getMiles" return miles }

2021-10-20 16:58:50 657

FlowPractice.zip

Android Kotlin Flow综合应用

2021-12-17

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除