1.基础概念介绍1.1 观察者模式观察者模式,其实对于Android开发者而言,并不陌生,button的setOnClickListener,就是一个典型的观察者模式。控件button是被观察者,它产生一个事件(点击),观察者OnClickListener接收到,做出相应的处理,而setOnClickListener就是订阅者,它将两者连接起来以上面为例,观察者模式需要具备的三个角色:被观察者,观
What is Kotlin?Kotlin是JVM和Android的实用编程语言,结合了OO和功能特性,专注于互操作性,安全性,清晰度和工具支持。本文记录自己学习kotlin认为需要记录的重点,如果需要详细学习,请点击Kotlin中文文档学习。基本类型在 Kotlin 中,所有变量的成员方法和属性都是一个对象。一些类型是内建的,它们的实现是优化过的,但对用户来说它们就像普通的类一样。数值
转载
2024-08-26 19:43:04
21阅读
上一篇介绍了 Android Studio安装Kotlin插件和使用,本篇介绍Kotlin基本语法。一 变量(var)和常量(val)Kotlin 语言声明一个变量使用关键字var,声明一个常量使用val,声明时如果没有指定类型可以自动推测出字段类型。1 常量 (val)val a: Int = 1 // 定义常量时进行赋值
val b = 2 // 自动推测常量类型为 Int
val
# 使用 Kotlin 代替 RxJava
在 Android 开发中,RxJava 是一个非常流行的库,用于处理异步事件和数据流。然而,随着 Kotlin 的普及和发展,许多开发者开始使用 Kotlin 替代 RxJava 来简化代码并提高效率。本文将介绍如何使用 Kotlin 代替 RxJava,并给出相应的代码示例。
## 为什么选择 Kotlin 代替 RxJava
RxJava 是
原创
2024-06-25 06:23:38
113阅读
1、变量class ArgUtils {
/**
* 变量 : var 可变变量, val 不可变变量
* 可以简单的理解为var是可写的,在它生命周期中可以被多次赋值;而val是只读的,仅能一次赋值
*
* 一个不可变对象意味着它在实例化之后就不能再去改变它的状态了。
* 如果你需要一个这个对象修改之后的版本,那就会再创建一个新的对象。
# Kotlin Coroutines 替代 RxJava
## 整体流程
为了让小白理解如何用 Kotlin Coroutines 替代 RxJava,我们可以按照以下流程进行教学:
```mermaid
journey
title Kotlin Coroutines 替代 RxJava 教学流程
section 准备工作
小白 -> 开发者: 提问如何替代 RxJa
原创
2023-09-13 12:47:41
134阅读
目录1、源码2、CoroutineContext3、CoroutineDispatcher3.1、代码实现4、CoroutineStart4.1、代码实现4.2、指定调度器CoroutineDispatcher后四种启动模式都无法取消?5、CoroutineScope1、源码 launch协程中总共有三个参数(async的参数与launch相同),如下:CoroutineContext&
# Kotlin RxJava3实现步骤
## 流程表格
| 步骤 | 描述 |
| --- | --- |
| 步骤一 | 引入RxJava3库 |
| 步骤二 | 创建Observable对象 |
| 步骤三 | 处理Observable对象发射的数据 |
| 步骤四 | 订阅观察者 |
## 代码实现步骤
### 步骤一:引入RxJava3库
首先,我们需要在项目的`build.g
原创
2023-12-29 04:02:48
159阅读
1.Flow流程中为什么是【冷】的先看一段Flow的使用代码:fun main() = runBlocking {
flow {
emit(0)
emit(1)
emit(2)
emit(3)
}.collect{
println("it:$it")
}
println("end")
转载
2024-10-06 14:02:01
97阅读
Kotlin 在 1.6.20 版本中加入了 Context Receivers 的想法。在这篇文章中,我想玩弄它们以了解它们的用处。请注意,如果您想一起玩,则需要使用context-receivers标志进行编译。Context Receivers背后的主要思想是将附加参数传递给函数,而无需显式执行。简化的模型样本让我们从一个简单的例子开始来展示它是如何工作的。我们想对两个 ba 之间的简单传输
转载
2023-12-18 12:54:54
115阅读
什么是协程协程(Coroutines)是一种比线程更加轻量级的存在,正如一个进程可以拥有多个线程一样,一个线程可以拥有多个协程有一点必须明确的是,一个线程的多个协程的运行是串行的,如果是多核CPU,多个进程或一个进程内的多个线程是可以并行运行的,但是一个线程内协程却绝对是串行的,无论CPU有多少个核。毕竟协程虽然是一个特殊的函数,但仍然是一个函数。一个线程内可以运行多个函数,但这些函数都是串行运行
按调用栈分类
由于协程需要支持挂起、恢复,因此对于挂起点的状态保存就显得极其关键。类似地,线程会因为 CPU 调度权的切换而被中断,它的中断状态会保存在调用栈当中,因而协程的实现也按照是否开辟相应的调用栈存在以下两种类型:
有栈协程 Stackful Coroutine:每一个协程都会有自己的调用栈,有点儿类似于线程的调用栈,这种情况下的协程实现其
参考链接示例来自bilibili Kotlin语言深入解析 张龙老师的视频本节先介绍协程的相关概念 概念可能枯燥,我们先要了解协程中的相关概念 然后结合代码理解这些概念 加深印象协程的定义协程通过将复杂性放入库中来简化异步编程。程序的逻辑可以在协程中顺序地表达,而底层库为我们解决异步性协程库可以将用户代码地相关部分包装为回调、订阅相关事件(listener)、在不同地线程(甚至不同的机器)上调度,
转载
2024-04-08 22:54:29
73阅读
如果您之前学习 Android MVP ,很可能是从 AndroidMVPSample(https://github.com/WuXiaolong/AndroidMVPSample)开始的,此Sample最初是 Android MVP 示例,后来融合 Retrofit 和 RxJava,分别演示了普通写法(Retrofit)、普通写法(Retrofit+Rxjava)、MVP+Retrofit+R
原创
2021-05-23 22:04:09
524阅读
Kotlin 协程初步认识, runBlocking、launch、async、调度器、withContext、协程理解等
@目录前言一、初识协程1.runBlocking: 阻塞协程2.launch: 创建协程3.Job4.coroutineScope5.协程取消6.协程超时7.async 并行任务8.调度器9.withContext总结前言你还在用
首先祝大家端午节快乐,吃粽子了没?哈哈。我今天一直在思考一个问题:端午节是为了纪念屈原老先生投江而在民间流传下来的节日。这本是何等悲壮的一件事,为何时至今日,变成了一个好像很喜庆的日子。屈原老先生估计心想:老子TM只是感动了自己吗?言归正传,虽然是端午佳节,但是我等屌丝,药不能停。世界一直在变化,要学会拥抱变化。今天想和大家分享的是协程,鄙人才识浅薄,还望诸公海涵。首先想说的是为什么会有协程的出现
在处理“kotlin rxjava 开启子线程”的问题时,我们需要首先明确这个问题所带来的背景和业务影响。随着应用复杂性的增加,尤其是在移动开发中,性能的优化显得尤为重要。RxJava 结合 Kotlin 的协程特性能够在多线程环境下有效管理复杂的异步编程。但如果未正确开启子线程,可能会导致界面卡顿、响应缓慢等问题,从而影响用户体验。
### 问题背景
在现代移动应用中,用户对性能的要求不断提高
前言本文旨在通过实际业务场景阐述如何使用Kotlin Flow解决Android开发中的痛点问题,进而研究如何优雅地使用Flow以及纠正部分典型的使用误区。有关Flow的介绍及其操作符用法可以参考:异步流 - Kotlin 语言中文站,本文不做赘述。基于LiveData+ViewModel的MVVM架构在某些场景下(以横竖屏为典型)存在局限性,本文会顺势介绍适合Android开发的基于Flow/C
转载
2024-09-12 12:11:28
134阅读
Kotlin协程的使用协程是什么?首先kotlin协程是kotlin的扩展库(kotlinx.coroutines)。线程在Android开发中一般用来做一些复杂耗时的操作,避免耗时操作阻塞主线程而出现ANR的情况,例如IO操作就需要在新的线程中去完成。但是呢,如果一个页面中使用的线程太多,线程间的切换是很消耗内存资源的,我们都知道线程是由系统去控制调度的,所以线程使用起来比较难于控制。这个时候k
转载
2023-12-15 10:55:41
74阅读
Android开发中,只能是UI线程才可以更新UI界面,否则会抛出异常。除了UI线程意外的其他线程都被称为子线程。我们通常所说的多线程可以直接理解为多个子线程。在Java里面,要开启子线程,有三种方案:一是继承自Thread;
二是实现Runable接口;
三是线程池技术。但面对多任务处理的多线程需求是,还是推荐线程池来实现,这样可以避免线程反复的创建和收回,造成的资源浪费;同时由于消线程池内部实
转载
2023-11-07 07:50:03
201阅读