
kotlin
文章平均质量分 71
Mr_Tony
这个作者很懒,什么都没留下…
展开
-
开发中各个工具的版本变化速查链接
该文档虽然是官方文档,但是不会把实验功能写出来,比较好的地方就是看起来整齐简洁,下一条文档也是官方的,很全面,但是文档写的复杂。可以从这个文档有个简单了解,具体每个版本细分特性可以查阅https://docs.oracle.com/en/java/javase/21/index.html 这个链接,然后将版本号修改下即可。可以选择不同的版本查看,比较不好的是,没有列出每个版本的新增变化。groovy的版本变化相较于其余更加难读主要位于官网的最下面。原创 2023-10-29 20:14:59 · 437 阅读 · 0 评论 -
android中gradle的kotlin编译配置选项
传递参数的发过誓可以直接在里面写。该配置在其余平台不可用。原创 2023-10-29 16:47:18 · 2029 阅读 · 0 评论 -
Coil的原理浅析与自定义加载类型
Coil是一种纯粹是一kotlin编写的,利用了协程特性的图片加载库,其代码量较少,算是比较轻量的图片加载库。对于常规类型的图片都有加载方式,不过也有无法预料的情况,比如加载apk文件中的图片,此文章基于此问题进行编写。Coil自身支持的类型有StringHttpUrlUriFileIntDrawableBitmap但是如果想新增类型的话需要拓展MapperFetcher。其中Mapper是对用于区分不同的类型,比如将String类型转换为File或者Uri。原创 2023-03-31 11:11:20 · 884 阅读 · 0 评论 -
在协程中将回调函数转为Flow
kotlin中的回调函数与flow的转换原创 2022-08-02 12:11:34 · 1969 阅读 · 0 评论 -
Kotlin的协程与生命周期
liveData与协程原创 2022-08-01 19:56:39 · 1828 阅读 · 0 评论 -
kotlin协程与线程池
协程与线程池原创 2022-07-28 17:09:26 · 1707 阅读 · 0 评论 -
Kotlin: 何时使用自定义访问器getter
记一个有意思的问题,在国外发现了一个帖子,为了避免有时候看不到,这里将原文复制如下:Kotlin Demystified: When to use custom accessorsWhile working on UAMP, I found it convenient to wrap several support library classes in a helper for a variety of reasons. One of the features I wanted from this wr原创 2021-12-29 12:24:02 · 902 阅读 · 0 评论 -
Kotlin Contract(契约)
虽然kotlin有智能推断功能,但是有时候还是有些代码没有办法进行推断,因此,诞生了Contract(契约)功能,不过目前该功能还是实验功能(ExperimentalContracts),其使用可以参考 apply、let等功能,kotlin源码中有大量的Contract(契约),示例如下:另外经过尝试,该函数可以写成顶层函数或者类中,但是不能在函数中定义契约函数。尝试版本为1.6@ExperimentalContractsfun isNull(value: String ?= null): Bool原创 2021-12-13 20:06:05 · 1609 阅读 · 0 评论 -
Kotlin的文档注释
一、前言在编写程序时候,有时候需要编写注释,对于一个代码的说明有时候会需要对其它代码进行关联。使点击关键词即可查看相关代码。不过文档注释功能不属于Android提供,属于由各自的语言提供,java文档注释和kotlin文档注释不同二、@link 和[]在java文档中 使用@link 可以链接到相应的代码在kotlin里面需要使用 []如下 /** * 添加基础聊天布局 * 如果直接重写该函数,而不重写[View] 函数时候,则不会添加到父布局 * @param原创 2021-09-09 15:51:48 · 4662 阅读 · 0 评论 -
Kotlin注解
@file@property@field@get@set@receiver@param@setparam@delegate原创 2021-08-31 18:55:14 · 149 阅读 · 0 评论 -
Android中同步异步任务
文章目录一、前言二、代码演示一、前言 在实际开发中会出现这种场景,有多个接口请求数据,需要等到这几个接口都请求完后再执行后面的任务。大部分情况下接口网络操作都封装完成,只有一共回调可供操作,这里使用CountDownLatch、CyclicBarrier来进行处理。二、代码演示 这里使用点击事件简化演示程序。代码如下(解开注释可以看到同样的结果):package com.example.helloworldimport androidx.appcompat.app.AppCompatAct原创 2021-08-23 13:46:17 · 834 阅读 · 0 评论 -
kotlin之let、also、apply、with、run
这几个网上介绍了很多,有点难以区分,所以需要自己多多体会一下,这里记录几个帖子Kotlin系列之let、with、run、apply、also函数的使用https://blog.youkuaiyun.com/u013064109/article/details/78786646作用域函数https://www.kotlincn.net/docs/reference/scope-functions.html...原创 2021-08-13 16:39:43 · 126 阅读 · 0 评论 -
Android中的kotlin拓展资源
Android上面为很多库做了kotlin拓展,但是需要引入为kotlin拓展的库才能使用某些方式,比如以下的方式 private val aViewModel: AViewModel by viewModels()https://developer.android.google.cn/kotlin/ktx/extensions-list原创 2021-08-11 18:37:45 · 112 阅读 · 0 评论 -
kotlin协程Flow的StateFlow和SharedFlow(十二)
一、前言有时候我们需要实时监听一个状态变化或者持续不断接收数据,Flow提供了StateFlow和SharedFlow以供我们使用二、使用方式略三、参考链接StateFlowhttps://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.flow/-state-flow/StateFlow 和 SharedFlowhttps://developer.android.googl原创 2021-08-11 17:49:57 · 4131 阅读 · 0 评论 -
Kotlin协程Select(十一)
文章目录一、前言二、select三、通道关闭时候的Select四、onSend五、延迟onAwait六、在延迟通道上切换七、参考链接一、前言select 表达式可以同时等待多个挂起函数,并 选择 第一个可用的。这样就可以实现这样一种功能,同时执行不同的处理,哪种返回了就处理哪种。二、select下面是一种简单的演示:fun CoroutineScope.fizz() = produce<String> { while (true) { // 每 300 毫秒发送一个 "Fizz原创 2021-08-06 17:51:57 · 619 阅读 · 0 评论 -
Kotlin协程的共享状态与并发(十)
文章目录一、前言二、有问题的代码三、Volatile四、线程安全的数据结构五、粒度控制1、细粒度控制2、粗粒度控制六、互斥七、Actors八、参考链接一、前言 在多线程开发中,会遇到多个线程修改读取单个值的情况。协程中也是如此二、有问题的代码 这里启动100个协程,执行1000次同样的操作看看结果如何suspend fun massiveRun(action: suspend () -> Unit) { val n = 100 // 启动的协程数量 val k = 1原创 2021-08-06 11:49:46 · 1129 阅读 · 0 评论 -
Kotlin协程的异常处理(九)
文章目录一、前言二、异常传播三、CoroutineExceptionHandler四、取消与异常五、异常的聚合六、取消异常七、监督八、监督作用域九、监督协程中的异常十、参考链接一、前言 协程在使用过程中会有异常情况,我么需要对异常进行处理。协程构建器有两种形式:自动传播异常(launch 与 actor)或向用户暴露异常(async 与 produce)。 当这些构建器用于创建一个根协程时,即该协程不是另一个协程的子协程, 前者这类构建器将异常视为未捕获异常,类似 Java 的 Thread.unca原创 2021-08-05 22:46:27 · 1172 阅读 · 0 评论 -
Kotlin协程的异步流Flow(八)
文章目录一、前言二、Flow的简单演示三、Flow的取消四、构建Flow五、过度流操作符六、转换操作符七、限长操作符八、末端流操作九、流是连续的十、Flow上下文十一、withContext 发出错误十二、flowOn 操作符十三、缓冲十四、合并十五、处理最新值十六、Zip十七、Combine十八、flatMapConcat 与 flattenConcat十九、flatMapMerge 与 flattenMerge二十、flatMapLatest二十一、Flow的异常二十二、异常的透明性二十三、完成情况二十原创 2021-08-04 22:59:13 · 3167 阅读 · 2 评论 -
Kotlin协程的Dispatchers和CoroutineContext(七)
文章目录一、前言二、Dispatchers三、Dispatchers.Unconfined四、线程之间的跳转五、协程及其子协程六、家长责任七、协程的名字八、元素组合九、协程范围十、读取本地数据十一、参考文档一、前言 协程总是在由CoroutineContext类型表示的某个上下文中执行。它是由一组元素构成的。主要是Job和Dispatchers构成的二、Dispatchers Dispatchers来确定协程由哪个或者哪些线程来执行。也可以使协程不受限制的运行。以下是参考例子@Testf原创 2021-08-02 15:50:46 · 1351 阅读 · 0 评论 -
Kotlin协程的挂起函数编写(六)
文章目录一、前言二、延迟启动协程三、GlobalScope.async四、参考链接一、前言在之前的例子中,我们知道可以通过launch或者async来启动协程,并可以控制其生命周期,而且还知道了通过async的异步可以做到并行运行。这里记录一下其它的操作二、延迟启动协程协程可以通过提前定义,然后当某一条件触发时候再进行启动,如下private suspend fun doSomethingUsefulOne(): Int { delay(1000L) // pretend we are d原创 2021-07-30 17:19:10 · 370 阅读 · 0 评论 -
Kotlin协程的取消与超时(五)
文章目录一、前言二、cancel()三、检查协程的运行状态四、finally五、 withContext(NonCancellable)六、超时TimeOut七、参考链接一、前言当使用协程进行异步任务的时候,往往也会因为一些情况对其进行取消。取消异步任务通常使用Job.cancel()函数二、cancel()对于cancel()的使用方式如下:import kotlinx.coroutines.*fun main() = runBlocking { val job = launch {原创 2021-07-30 16:36:05 · 2457 阅读 · 2 评论 -
Kotlin协程Channel(四)
文章目录一、前言二、Channel三、参考链接一、前言在使用线程的时候有时候我们需要在两个线程之间进行通信,协程也是如此。在协程上面通信的话需要使用Channel。Channel既可以一个协程对一个协程,也可以多个协程对多个协程。通常发送信息的协程被称为生产者接收信息的协程被称为消费者,需要注意的是每条消息只会被处理一次,然后就从Channel删除掉了二、ChannelChannel的实现如下interface SendChannel<in E> { suspend fun s原创 2021-07-29 11:17:56 · 676 阅读 · 0 评论 -
kotlin协程runBlocking和coroutineScope(三)
文章目录一、前言二、相关依赖三、runBlocking和coroutineScope四、为什么runBlocking可以直接启动协程五、launch、async三、参考链接一、前言虽然之前已经讲了两篇协程,不过本篇还是协程基础。本篇主要是从kotlin官网上了解的关于协程的相关内容二、相关依赖如果只是使用协程的话,可以使用下面的依赖。下面的库并不依赖于Android环境:dependencies { implementation 'org.jetbrains.kotlinx:kotlinx原创 2021-07-28 23:18:42 · 1199 阅读 · 0 评论 -
Kotlin协程(二)
文章目录一、前言二、添加依赖三、Dispatch四、CoroutineScope五、Job六、CoroutineContext三、参考链接一、前言之前简单的了解了下协程,但是协程还有很多东西,所以从本篇开始进行下系统的了解二、添加依赖在Android中使用协程,需要添加以下依赖:dependencies { implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.9'}三、Dispatch协程主要有三原创 2021-07-28 14:18:11 · 396 阅读 · 0 评论 -
Kotlin协程(一)
文章目录一、前言二、线程与协程的区别线程需要大量的资源。不可预测的行为竞态条件三、协程GlobalScope.launchrunBlocking 简述async()何时将函数标记为 suspend四、参考链接一、前言 在kotlin中协程用法是比较广泛的,协程也是比较复杂的,本文只对其做个简单的记录,后面再进行详细描述二、线程与协程的区别 由于有些耗时操作需要等待,因此常常放在子线程中去操作,用来提升用户体验。但是线程存在一些以下问题(这些问题其实可以解决,只是比较麻烦),所以kotlin建原创 2021-07-27 16:11:03 · 550 阅读 · 0 评论 -
Compose的环境配置(一)
文章目录一、前言二、依赖配置三、示例代码四、总结五、参考链接:一、前言现在是2021年5月14日,今天着手开始进行Compose的学习,本觉得出来也很久了。各方面教程比较完善了,但是还是遇到了很多问题,这里将过程总结一下。在实际学习中发现Compose第一个正式版本其实还没有出来,所以等到后面正式版本出来后,不知道是否还需要进行更改。另外Compose预览这个功能现在还是Canary版本,正式版本的Android Studio是没法使用的,所以写完后如果想看效果只能安装下程序了二、依赖配置这里的环境原创 2021-05-14 22:25:30 · 3450 阅读 · 0 评论 -
Flutter与Kotlin通信代码(残缺)
这个代码是写到一半的代码,没有测试,留待周末使用事情原由:在学习Flutter中混合通信模块,由于示例代码给的是java代码,我生成的是kotlin代码,所以有点不一样。百度上面都是java,所以没找到适合的代码官方链接:https://flutter.cn/docs/get-started/flutter-for/android-devs#how-do-i-handle-incoming-intents-from-external-applications-in-flutter这里给出部分的官原创 2020-11-20 18:55:38 · 589 阅读 · 0 评论 -
使用TabLayout和ViewPager2制作导航页面
编写的页面效果如下,可以左右滑动以及进行点击,页面布局由Fragment编写一、引入相关依赖:implementation com.google.android.material:material:1.0.0implementation androidx.viewpager2:viewpager2:1.0.0二、布局文件:1、整体布局文件activity_make_money.xml<?xml version="1.0" encoding="utf-8"?><Linear原创 2020-08-02 14:23:20 · 1649 阅读 · 0 评论 -
kotlin 常见操作符及集合高阶函数
1、Kotlin 集合操作汇总https://zhuanlan.zhihu.com/p/1093809932、kotlin常见操作符https://www.jianshu.com/p/6a967b78f56d原创 2020-07-24 09:52:31 · 223 阅读 · 0 评论 -
kotlin 多接口回调的实现方式(一)
没啥好说的,看标题就明白了。代码比较绕,慢慢看…. 本来想解释下代码,不过可能还在受上一篇帖子的影响吧,不知道说些什么… 有不明白的留言吧… 可以先把代码复制一份到电脑上运行一下,先看看效果package com.example.kotlinapplicationimport org.junit.Test/** 多接口回调的代码测试 */typealias Fun1 = (S...原创 2018-09-15 22:06:44 · 2247 阅读 · 0 评论 -
kotlin 多接口回调的实现方式(二)
上一篇是纯kotlin实现,这一篇是基于现有Java接口做的kotlin拓展,最早是在stackoverflow上看的(现在忘了地址是哪个)。只是当时没看懂,当完成上一篇后,再看这一篇时候忽然就明白了作者的意思,这里做个记录。 代码可以直接运行,可以先运行下看下例子:interface Callbacks { fun onCurrentLocation(location: Stri...原创 2018-09-17 10:11:20 · 2520 阅读 · 0 评论 -
kotlin中的apply函数的对象赋值问题
注:前面的主要是概念解释,源于《Kotlin实战》一书,apply的使用问题在最下面,如果对于with和apply的概念很熟悉可以直接看下面内容。kotlin标准库中apply函数和with函数是带接受者的lambda。这两个函数可以使我们对同一对象执行多次操作,而不需要把对象的名称写出来。with代码清单1:使用whith构建字母表 fun alphabet():...原创 2018-05-04 15:02:43 · 2705 阅读 · 0 评论