自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Kotlin let、with、run、apply、also函数

简述相比Java, Kotlin提供了不少高级语法特性。对于一个Kotlin的初学者来说经常会写出一些不够优雅的代码。在Kotlin中的源码标准库(Standard.kt)中提供了一些Kotlin扩展的内置函数可以优化kotlin的编码。Standard.kt是Kotlin库的一部分,它定义了一些基本函数。 这个源代码文件虽然一共不到50行代码,但是这些函数功能都非常强大。函数定义 函数名 实现 let fun T.le.

2021-03-15 08:19:02 273

原创 Jetpack:Databinding组件

DataBinding介绍DataBinding是一个支持库,顾名思义:数据绑定,它可以将布局页面中的组件与应用中的数据绑定,它支持单向绑定与双向绑定,所谓单向绑定是指数据的变化会驱动页面的变化。而双向绑定除此之外还支持页面的变化驱动数据的变化,DataBinding只是一种工具,它解决的是View和数据之间的绑定。MVVM是一种架构模式,两者是有本质区别的。使用DataBinding如果想在应用中使用DataBinding,需要在应用的build.gradle文件中添加dataBindin

2021-03-10 00:38:57 254

原创 Jetpack:ViewModel组件

一、介绍ViewModel类是被设计用来以可感知生命周期的方式存储和管理 UI 相关数据,ViewModel中数据会一直存活即使 activity configuration发生变化,比如横竖屏切换的时候。ViewModel 可以解决那些痛点。1、数据持久化我们知道在屏幕旋转的 时候 会经历 activity 的销毁与重新创建,这里就涉及到数据保存的问题,显然重新请求或加载数据是不友好的。在 ViewModel 出现之前我们可以用 activity 的onSaveInstanceState(

2021-03-08 07:44:50 484

原创 Jetpack:Lifecycle组件

1. Lifecycle简介Lifecycle是Android Jetpack框架提供的能够感知组件(宿主)生命周期变化的组件,它能持有宿主(如Activity或Fragment)生命周期状态的信息,并且允许其他观察者注册监听宿主的生命周期状态变化,这就使得我们不用主动去获取宿主的状态,有利于降低代码耦合度并更容易维护。Lifecycle是JetPack组件库的核心基础,很多其他的Jetpack组件,比如LiveData、ViewMoedel等,都是基于它实现的。1.1 Lifecycle基本使用

2021-03-07 17:07:30 214

原创 Android Studio生成签名文件以及查看签名

Android Studio生成签名文件以及查看签名Android Studio生成签名文件如果已经有签名文件,Choose existing选择导入没有则 Create newWarning:JKS 密钥库使用专用格式。建议使用 "keytool -importkeystore -srckeystore D:\WorkEnv\androidsign\sign.jks -destkeystore D:\WorkEnv\androidsign\sign.jks -destst

2021-03-07 12:44:11 6006

原创 Gradle命令详解

Gradle命令详解我们介绍了 Gradle 的任务声明,任务依赖,Gradle 构建的顺序等。其实在文章中我们也提到了一些 Gradle 命令。本文我们将为大家介绍一下 Gradle 的命令,包括会将前面的命令使用做一个汇总。1. 使用 Gradle 命令使用 Gradle 命令就是我们在命令控制台输入 Gradle 命令,使用 Gradle 命令我们可以配置 Gradle 环境,也可以不用配置 Gradle 环境,下面我们看下具体的使用方法1.1 已经安装了Gradle环境如果安装了

2021-03-04 23:07:18 3349 2

原创 编写 Gradle 任务Task

编写 Gradle 任务Task我们先介绍了 Gradle,然后学习了 Groovy 的基础语法,紧接着介绍了 Android 项目中 Gradle 的配置。我们从配置中可以看出 Gradle 的构建都是基于任务(Task)的,有了前面几节的基础,今天这节课我们来学习一下,怎么样去定义一个 Gradle 的任务(Task),以及Task的生命周期。1. 声明 Task关于 Task 的声明,我们其实在《构建自己的 Gradle 工程》这一节里面就有所介绍,我们创建 Gradle 项目时就声明..

2021-03-04 08:02:37 790 1

原创 Gradle Wrapper 详解

Gradle Wrapper 详解我们介绍了 Android 项目的目录及 Gradle 配置,我们提到有个目录是/gradle/wrapper。今天这篇文章我们来学习 Gradle Wrapper。通过这篇文章我们将了解什么是 Gradle Wrapper?为什么需要用 Gradle Wrapper?以及 Gradle Wrapper 的重要性。1. 什么是 Gradle Wrapper?关于“什么是 Gradle Wrapper?”这个问题在官网是这么定义的:The recommende

2021-03-03 23:49:21 6877 3

原创 Groovy 语言基础

Groovy 语言基础Gradle 是一个构建工具,它的构建脚本是基于 Groovy 或是 Kotlin 语言编写的。今天我们就来看下 Groovy 的基础语法。Groovy结合了 Java、Python、Ruby 等当下几大流行语言的优点。它可以说是从 Java 中衍生出来的,为什么这么说呢?因为它的语法和 Java 非常的相似,它的文件也是可以编译为 .class 文件,而且可以使用 Java 的类库。1. Groovy 基础语法1.1 基础语法1. 定义变量 def在 Gro.

2021-03-02 21:00:38 1567

原创 Gradle 配置详解

Gradle 配置详解我们为大家介绍一下 Android 项目中 Gradle 的配置。1. AndroidStudio 项目结构我们介绍 AndroidStudio 中 Android 项目的 Gradle 配置之前,我们先来看下 AndroidStudio 中 Android 项目的结构,我们新建一个项目结构大致如下图所示:我们通过上面的图片可以看到,Android 项目中跟 Gradle 相关的主要有 7 个部分:根目录下的 build.gradle:顶级构建文件,配置 Gr.

2021-03-02 00:22:16 5479 1

原创 构建自己的 Gradle 工程

构建自己的 Gradle 工程这篇文章我们将一步步带大家从环境搭建到创建一个 Gradle 工程。从 0 到 1,帮助大家更好的理解 Gradle。1. Gradle 的安装我们安装 Gradle 之前首先要确保我们已经在系统中安装了 JDK,并且 JDK 的版本最低在 1.7。注意最新的 Gradle 版本需要 JDK1.8 及以上。可以在控制台用java -version命令查看自己的 JDK 版本。如下:Gradle 的安装有 2 种方式:包安装:包安装方式就是通过包管理..

2021-03-01 23:51:54 355

原创 Kotlin lambda表达式

Kotlin lambda表达式这篇文章一起来聊下 Kotlin 中的 lambda 表达式。lambda 表达式大家应该都不陌生,这是在 Java8 中引入的一个很重要的特性。将开发者从原来繁琐的语法中解放出来,可是很遗憾的是只有Java8 及以上版本才能使用。而 Kotlin 则弥补了这一问题,Kotlin 中的 lambda 表达式与 Java 混合编程可以支持 Java8以下的版本。那我们带着以下几个问题一起来看下 Kotlin 中 lambda 表达式。1. 为什么要使用Kotlin的la

2021-03-01 23:17:54 586

原创 Gradle简介

Gradle 简介关于 Gradle 我们开发中用的非常多,它的知识点完全可以写一本书,这个专题我们重点针对 Gradle 在 Android 日常开发中的应用进行讲解。本文我们主要先介绍一下 Gradle 是什么?有哪些特性?优点在哪?为什么我们构建要用 Gradle?1. 什么是 Gradle?什么是 Gradle 呢?在 Gradle 官网中是这么介绍的:Gradle is an open-source build automation tool focused on flexibil

2021-03-01 07:45:50 1162

原创 Kotlin 对象表达式和伴生对象

Kotlin 对象表达式和伴生对象本篇文章将是 Kotlin 面向对象系列的最后一篇文章,这篇文章将会介绍几个特殊的对象语法,这是 Kotlin 语法中独有的。比如对象表达式 (object),天生的单例对象它会使写一个单例模式变得特别简单,而不是像 Java 那样声明一些语法模板。此外伴生对象 (companion object) 它将替代 Java 中的 static 静态成员。1. 为什么需要对象表达式1.1 对象表达式天生单例,会使得单例模式更简单相信很多小伙伴都手写过 Java 中

2021-03-01 00:15:05 266

原创 Kotlin中的操作符函数

Kotlin 中的操作符函数这节课我们来聊聊 Kotlin 这门语言对函数式编程的支持。我们都知道在 Kotlin 这门语言中函数荣升成为了一等公民,所以在支持函数式编程的方面,Kotlin 也是非常给力的,并且在 Kotlin 中语法也尽量推荐接近函数式编程的风格。学过以及了解过函数式编程的小伙伴都知道函数式编程最吸引人的地方,莫过于它拥有丰富的函数式操作符,可以使用一种全新的编程方式去操作集合数据。其中操作符最流行莫过于函数式中“三板斧”(过滤filter、映射map、折叠foldLeft/化约

2021-02-28 23:41:09 1182

原创 Kotlin系统类型

Kotlin类型系统这篇文章一起来看下 Kotlin 中类型系统,其中涉及到一个很重要的概念就是大家常说的可空性以及为什么Kotlin 相比 Java 在一定程度上能降低空指针异常。此外在 Kotlin 中完全采用和 Java 不同思路来定义它的类型系统。也正因为这样类型系统天然具有让 Kotlin 在空指针异常出现的频率明显低于 Java出现的频率的优势。此外 Kotlin 考虑使用和 Java 完全不同类型系统,以及它是如何去做到极大兼容和互操作。1. 梳理概念在学习 Kotlin 类型系.

2021-02-28 23:11:04 280

原创 Kotlin扩展函数

Kotlin 扩展函数1. 为什么需要扩展函数?我们都知道 Koltin 这门语言与 Java 有非常好的互操作性,并且扩展函数这个新特性可以很平滑与现有Java 代码集成。甚至纯 Kotlin 的项目都可以基于 Java 库或者 Android 中的一些第三方框架库来构建,所以扩展函数非常适合 Kotlin 和 Java 语言混合开发模式。在很多公司一些比较稳定良好的库都是 Java 开发的,也完全没必要去用 Kotlin 语言重写。但是想要扩展库的接口和功能,这时候扩展函数可能就会派上用场。使用

2021-02-27 23:51:16 2779

原创 Kotlin数据类、密封类、内部类和嵌套类

Kotlin 数据类、密封类、内部类和嵌套类Kotlin 几个比较特殊的类,其中数据类 (data class) 和密封类 (sealed class) 是 Java 中不存在的,所以下面会一一介绍它们如何使用、使用场景、它们解决了哪些问题以及语法糖背后的原理。此外在 Kotlin 中存在嵌套类和内部类,需要注意的是 Kotlin 的嵌套类不是内部类,这点和 Java 是不一样的,所以内部嵌套类不能访问外部类实例。在 Kotlin 中内部类声明需要单独使用inner关键字声明1. 内部类和嵌..

2021-02-26 00:32:05 712

原创 Kotlin抽象与接口

Kotlin 抽象与接口其实在 Kotlin 中继承、接口大部分和 Java 是一样的,但是在语法层面支持是不一样。因为 Kotlin 会有一层语法糖可以很方便高效地声明某个语法,从而让你把更多精力专注在业务逻辑上,而不是语法代码模板上。然后我们还会一起来聊下 Kotlin 多继承的实现,Kotlin 和 Java 一样都是单继承,这一点是毋庸置疑的,但是我们也会需要多继承场景,那么 Kotlin 是怎么解决这样场景的呢?大家肯定想到的是接口多继承,具体怎么一起来看看吧。1. 抽象与接口与 Ja

2021-02-25 22:59:42 128

原创 Kotlin类和对象

Kotlin 类和对象从这篇文章开始我们一起正式进入 Kotlin 面向对象的世界,Kotlin 实际上也是一门面向对象的语言但同时又兼顾了函数式编程语言。只不过函数在 Kotlin 中的地位被提升至一等公民。但是在 Kotlin 中也是有类、对象、属性、方法等。1. Kotlin 中的类在 Kotlin 中类和 Java 中概念基本是一致的,都是使用class关键字来声明一个类,一个类中可以用属性表示一个类的状态,可以用方法来表示一个类的行为。但是与 Java 不同的是 Kotlin 中的..

2021-02-25 22:41:38 231

原创 Kotlin中的集合

Kotlin 中的集合今天一起来探索下 Kotlin 中的集合,集合可以说是编程语言中最为常用以及核心语法点之一。集合一般用于结构化数据存储,我们都很熟悉 Java 中的集合。其实 Kotlin 中的集合与 Java 中的集合还是有一些不同的。最大不同点在于在 Kotlin 中集合是严格分类,分为只读和可变类似于 Kotlin 中的变量的只读和可变,然后针对不同的场景来选择使用只读集合或可变集合。所以下面会展开详细介绍 Kotlin 中的集合。1. 集合的分类在 Kotlin 中集合主要分为可变

2021-02-25 22:20:40 1239

原创 Kotlin中的typealias别名

Kotlin 中的 typealias 别名今天一起来研究一下 Kotlin 中一个特殊的语法 typealias (别名),关于 typealias 类型别名,可能有的 Kotlin 开发人员接触到过,有的还没有碰到过。接触过的,可能也用得不多,不知道如何更好地使用它。本篇文章会阐述了什么是类型别名、类型别名的使用场景、类型别名的实质原理、类型别名和 import as 对比以及类型别名中需要注意的坑。看完这篇文章,仿佛打开 kotlin 中的又一个新世界,你将会很神奇发现一个小小 typealias

2021-02-25 08:11:36 1738

原创 Kotlin中的序列(Sequences)

Kotlin 中的序列(Sequences)序列(Sequences)实际上是对应 Java8 中的 Stream 的翻版。从之前文章可以了解到 Kotlin 定义了很多操作集合的 API,没错这些函数照样适用于序列(Sequences),而且序列操作在性能方面优于集合操作。而且通过之前函数式 API 的源码中可以看出它们会创建很多中间集合,每个操作符都会开辟内存来存储中间数据集,然而这些在序列中就不需要。1. 为什么需要 Sequences我们一般在 Kotlin 中处理数据集都是集合,以及使

2021-02-25 07:38:59 928

原创 Kotlin中的预置注解

Kotlin 中的预置注解在 Kotlin 中最大的一个特点就是可以和 Java 做到极高的互操作性,我们知道 Kotlin 的语法和 Java 语法还是有很大的不同,要想做到与 Java 做到很大兼容性可能需要携带一些额外信息,供编译器或者运行时做类似兼容转换。其中注解就起到了很大的作用,在 Kotlin 内置很多个注解为了解决 Java 中的调用 Kotlin API 的一些调用习惯和控制 API 的调用。它们就是 Kotlin 中的 @Jvm 系列的注解,咱们一一来看下它们都有哪些。1. @J

2021-02-23 23:49:45 788

原创 Kotlin的注解

Kotlin 中的注解是 100% 与 Java 注解兼容的,有很多相同的地方,但是也有一些不同的地方1. 注解的本质注解实际上就是一种代码标签,它作用的对象是代码。它可以给特定的注解代码标注一些额外的信息。然而这些信息可以选择不同保留时期,比如源码期、编译期、运行期。然后在不同时期,可以通过某种方式获取标签的信息来处理实际的代码逻辑,这种方式常常就是我们所说的反射。2. 注解的定义在 Kotlin 中注解核心概念和 Java 一样,注解就是为了给代码提供元数据。并且注解是不直接影响代码的执

2021-02-23 22:56:30 1372

原创 Jetpack应用架构指南

0. 前言在 2017 年,Android 推出了 Android Jetpack,它是新一代组件、工具和架构指导,旨在加快 Android 应用开发速度Android Jetpack 分为四大块:Architecture、UI、Foundationy 以及 Behavior,随着时间的增加,Android 团队在 Jetpack 又增添了许多组件,目前最新的版图如下。1. Jetpack 架构组件Jetppack 意在帮助我们开发者加快开发速度,能够让我们专注于自己的业务而不是花费大量

2021-02-23 01:21:20 277

原创 Kotlin学习:Kotlin泛型

Kotlin 泛型泛型,即 "参数化类型",将类型参数化,可以用在类,接口,方法上。与 Java 一样,Kotlin 也提供泛型,为类型安全提供保证,消除类型强转的烦恼。声明一个泛型类:class Box<T>(t: T) { var value = t}创建类的实例时我们需要指定类型参数val box: Box<Int> = Box<Int>(1)// 或者val box = Box(1) // 编译器会进行类型推断,1 类型

2021-02-21 23:45:18 1059

转载 Kotlin学习:Kotlin委托

kotlin 委托委托模式是软件设计模式中的一项基本技巧。在委托模式中,有两个对象参与处理同一个请求,接受请求的对象将请求委托给另一个对象来处理。Kotlin 直接支持委托模式,更加优雅,简洁。Kotlin 通过关键字 by 实现委托类委托类的委托即一个类中定义的方法实际是调用另一个类的对象的方法来实现的。以下实例中派生类 Derived 继承了接口 Base 所有方法,并且委托一个传入的 Base 类的对象来执行这些方法// 创建接口interface Base {

2021-02-19 23:55:01 218 1

原创 Kotlin学习:Kotlin对象表达式和对象声明

Kotlin 对象表达式和对象声明Kotlin 用对象表达式和对象声明来实现创建一个对某个类做了轻微改动的类的对象,且不需要去声明一个新的子类对象表达式通过对象表达式实现一个匿名内部类的对象用于方法的参数中window.addMouseListener(object : MouseAdapter() { override fun mouseClicked(e: MouseEvent) { // ... } override fun mouseEnte

2021-02-12 23:55:20 178 1

原创 Kotlin学习:Kotlin枚举类

Kotlin 枚举类枚举类最基本的用法是实现一个类型安全的枚举。枚举常量用逗号分隔,每个枚举常量都是一个对象enum class Color{ RED,BLACK,BLUE,GREEN,WHITE}枚举初始化每一个枚举都是枚举类的实例,它们可以被初始化enum class Color(val rgb: Int) { RED(0xFF0000), GREEN(0x00FF00), BLUE(0x0000FF)}默认名称为枚举字符名,值从0开始

2021-02-11 01:21:48 820 3

原创 Kotlin学习:Kotlin数据类与密封类

Kotlin 数据类与密封类数据类Kotlin 可以创建一个只包含数据的类,关键字为datadata class User(val name: String, val age: Int)编译器会自动的从主构造函数中根据所有声明的属性提取以下函数:equals()/hashCode() toString()格式如"User(name=John, age=42)" componentN() functions对应于属性,按声明顺序排列 copy()函数如果这些函数在类...

2021-02-09 23:59:44 193

原创 Kotlin学习:Kotlin扩展

Kotlin 扩展Kotlin 可以对一个类的属性和方法进行扩展,且不需要继承或使用 Decorator 模式。扩展是一种静态行为,对被扩展的类代码本身不会造成任何影响。扩展函数扩展函数可以在已有类中添加新的方法,不会对原类做修改,扩展函数定义形式fun receiverType.functionName(params){ body}receiverType:表示函数的接收者,也就是函数扩展的对象 functionName:扩展函数的名称 params:扩展函数的参数

2021-02-09 00:05:40 285

原创 Kotlin学习:Kotlin接口

Kotlin 接口Kotlin 接口与 Java 8 类似,使用 interface 关键字定义接口,允许方法有默认实现interface MyInterface { fun bar() // 未实现 fun foo() { //已实现 // 可选的方法体 println("foo") }}实现接口一个类或者对象可以实现一个或多个接口class Child : MyInterface { override fun ba

2021-02-07 23:28:49 366 1

原创 Kotlin学习:Kotlin继承

Kotlin 继承Kotlin 中所有类都继承该 Any 类,它是所有类的超类,对于没有超类型声明的类是默认超类class Example // 从 Any 隐式继承Any 默认提供了三个函数equals()hashCode()toString()注意:Any 不是 java.lang.Object。如果一个类要被继承,可以使用 open 关键字进行修饰open class Base(p: Int) // 定义基类class Derived(

2021-02-07 23:22:26 238 2

原创 Kotlin学习:Kotlin类和对象

Kotlin 类和对象类定义Kotlin 类可以包含:构造函数和初始化代码块、函数、属性、内部类、对象声明Kotlin 中使用关键字class声明类,后面紧跟类名class Runoob { // 类名为 Runoob // 大括号内是类体构成}也可以定义一个空类class Empty可以在类中定义成员函数class Runoob() { fun foo() { print("Foo") } // 成员函数}类的属性属性定义类的属性..

2021-02-05 00:08:18 192

原创 Kotlin学习:Kotlin循环控制

Kotlin 循环控制for 循环for 循环可以对任何提供迭代器(iterator)的对象进行遍历,语法如下for (item in collection) print(item)循环体可以是一个代码块for (item: Int in ints) { // ……}如上所述,for 可以循环遍历任何提供了迭代器的对象。如果你想要通过索引遍历一个数组或者一个 list,你可以这么做for (i in array.indices) { print(arr

2021-02-03 00:20:54 380

原创 Kotlin学习:Kotlin条件控制

Kotlin 条件控制if 表达式一个 if 语句包含一个布尔表达式和一条或多条语句// 传统用法var max = a if (a < b) max = b// 使用 else var max: Intif (a > b) { max = a} else { max = b} // 作为表达式val max = if (a > b) a else b我们也可以把 IF 表达式的结果赋值给一个变量val max = if (a

2021-01-31 17:02:06 242

原创 Kotlin学习:Kotlin基本数据类型

Kotlin 基本数据类型Kotlin 的基本数值类型包括 Byte、Short、Int、Long、Float、Double 等。不同于 Java 的是,字符不属于数值类型,是一个独立的数据类型类型 位宽度 Double 64 Float 32 Long 64 Int 32 Short 16 Byte 8 字面常量下面是所有类型的字面常量:十进制:123 长整型以大写的 L 结尾:123L 16 进制以 0x 开头:0

2021-01-31 14:08:06 373

原创 Kotlin学习:Kotlin基础语法

Kotlin 基础语法包声明代码文件的开头一般为包的声明package com.runoob.mainimport java.util.*fun test() {}class Runoob {}kotlin源文件不需要相匹配的目录和包,源文件可以放在任何文件目录。以上例中 test() 的全名是 com.runoob.main.test、Runoob 的全名是 com.runoob.main.Runoob如果没有指定包,默认为default包默认导入有多个包会..

2021-01-28 22:50:44 192

原创 Kotlin学习:基础语法 基本数据类型 条件控制 循环控制

KotlinKotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,Kotlin 可以编译成Java字节码,也可以编译成 JavaScript,方便在没有 JVM 的设备上运行Kotlin 程序文件以 .kt为什么选择 Kotlin?简洁: 大大减少样板代码的数量。 安全: 避免空指针异常等整个类的错误。 互操作性: 充分利用 JVM、Android 和浏览器的现有库。 工具友好: 可用任何 Java IDE 或者使用命令行构建。Kotlin 基础语法默认导入有多个包

2021-01-27 23:21:15 239

Android 权限检查EasyPermissions

Android 权限检查EasyPermissions ,Android 6.0之前的系统用户在安装apk文件时会根据app声明的权限声称权限列表,用户只有在同意了申请的权限后才可以继续安装应用。这样就存在了很大的安全隐患。因此在android 6.0后的系统中对权限进行了分级。一种是normal permission,一种是 dangerous permission级别权限。 Android 6.0在我们原有的AndroidManifest.xml声明权限的基础上,又新增了运行时权限动态检测(就是对dangerous permission级别权限进行动态权限监测),以下权限都需要在运行时判断

2017-09-25

空空如也

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

TA关注的人

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