![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Kotlin
文章平均质量分 87
Jason_Lee155
不生产文章,只是文章的搬运工。。。
展开
-
在Android上用kotlin对象表达式
Kotlin之对象表达式原创 2023-12-13 14:24:15 · 719 阅读 · 0 评论 -
Kotlin的5种单例模式
kotlin的饿汉式、懒汉式、线程安全的懒汉式、双重校验锁式、静态内部类式原创 2023-01-30 09:36:35 · 9284 阅读 · 0 评论 -
kotlin方法传入lambda表达式参数并调用invoke什么意思
kotlin方法传入lambda表达式参数并调用invoke原创 2022-06-03 22:02:49 · 1409 阅读 · 1 评论 -
Kotlin注解之@JvmOverloads、@JvmStatic、@JvmField、@JvmName
@JvmOverloads,一句话:为了解决Java不能重载kotlin 有默认参数的方法原创 2022-05-04 22:55:54 · 1124 阅读 · 0 评论 -
Kotlin返回值Unit、Nothing与Any
Unit类型Kotlin也是面向表达的语言。Kotlin中Unit类型实现了与java中void一样的功能。public object Unit {// Unit类型是一个object对象类型 override fun toString() = "kotlin.Unit" // toString函数返回值}当一个函数没有返回值的时候,我们用Unit来表示这个特征,而不是null,大多数时候我们不需要显示地返回Unit,或者声明一个函数的返回值是Unit,编译器会推断它。fun原创 2021-12-15 14:00:00 · 1893 阅读 · 0 评论 -
一个例子看懂kotlin的集合和序列
构造对比:1.集合这里setOf和mutableSetOf就是一个只读,一个支持修改处理。因为集合泛型的擦除,val和var其实不能控制只读和读写。故用这种构造方法。// 挨个元素传入val numbersSet = setOf("one", "two", "three", "four")val emptySet = mutableSetOf<String>()val numbersMap = mapOf("key1" to 1, "key2" to 2, "key3" to原创 2021-09-12 10:12:57 · 261 阅读 · 0 评论 -
屏幕旋转导致Activity销毁重建,ViewModel是如何恢复数据的
前言当屏幕旋转或者切换系统语言时,Activity生命周期从销毁再重建,但是ViewModel里面的变量值不受到影响,说明ViewModel中的变量在屏幕旋转前进行了存储,在屏幕旋转后又进行了恢复。里面的原理是怎么实现的呢?一、获取ViewModel实例// MainActivity.ktval viewModel = ViewModelProvider(this).get(MainViewModel::class.java)这个代码拆分成2段来分析:ViewModelProvi.转载 2021-08-28 21:39:58 · 2048 阅读 · 0 评论 -
Activity销毁重建导致LiveData数据倒灌
问题前因我们做的是一个类似ofo的App,面向海外市场,有些国家存在多种语言,例如加拿大。用户骑行完毕后,在HomeActivity请求结束行程的接口,HomeActivity中注册结束行程的LiveData监听,如果返回的结果是成功,会跳到一个评价页面,用户评价完成,再返回主页。某一天,客服反馈了一个奇怪的问题:一个用户说在主页,什么事情都没干,立马自动进入了评价页面,经常发生。寻找原因最开始遇到这个问题,简直一脸懵逼,第一个感觉:这应该不是我的bug吧????查看代码,进入评分页转载 2021-08-28 14:49:47 · 1008 阅读 · 0 评论 -
使用registerForActivityResult替代onActivityResult
1. 老的实现方式日常开发中,实现页面传值,通常通过startActivityForResult和onActivityResult配合,通过判断requestCode处理不同的业务场景:startActivityForResult(intent, requestCode)override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(r原创 2021-08-27 22:59:01 · 4053 阅读 · 4 评论 -
Android Jetpack组件之Hilt使用
本篇文章的主题是Hilt。Hilt是一个功能强大且用法简单的依赖注入框架,同时也可以说是今年Jetpack家族中最重要的一名新成员。那么为什么说这是一篇我自己都比较怕的文章呢?因为关于依赖注入的文章太难写了。我觉得如果只是向大家讲解Hilt的用法倒还算是简单,但是如果想要让大家弄明白为什么要使用Hilt?或者再进一步,为什么要使用依赖注入?这就不是一个非常好写的话题了。本篇文章我会尝试将以上几个问题全部讲清楚,希望我可以做得到。为什么要使用依赖注入?依赖注入的英文名是Dependency转载 2021-04-27 21:20:55 · 1604 阅读 · 5 评论 -
Android Jetpack组件App Startup简析
2、为什么需要App startupApp Startup是一个可以用于加速App启动速度的一个库。很多人一听到可以加速App的启动速度?那这是好东西啊,迫不及待地想要将这个库引入到自己的项目当中,结果研究了半天,发现越看越不明白,怎么学着学着还和ContentProvider扯上关系了?所以,在学习App Startup的用法之前,首先我们需要搞清楚的是,App Startup具体是用来解决什么问题的。比如,LitePal是一个Android数据库框架。这个框架可以帮助大家自动管理表的创建与升转载 2021-04-25 22:11:56 · 337 阅读 · 0 评论 -
Android Jetpack组件之WorkManger使用介绍
2、WorkManger简介WorkManger是Android Jetpack提供执行后台任务管理的组件,它适用于需要保证系统即使应用程序退出也会运行的任务,WorkManager API可以轻松指定可延迟的异步任务以及何时运行它们,这些API允许您创建任务并将其交给WorkManager立即运行或在适当的时间运行。WorkManager根据设备API级别和应用程序状态等因素选择适当的方式来运行任务。如果WorkManager在应用程序运行时执行您的任务之一,WorkManager可以在您应用程序原创 2021-04-25 17:36:19 · 1290 阅读 · 0 评论 -
Android Jetpack组件之Navigation使用-源码
2、Navigation简介导航架构组件简化了Android应用程序中导航的实现,通过在xml中添加元素并指定导航的起始和目的地,从而在Fragment之间建立连接在Activity中调用xml中设置的导航action从而跳转界面到目的地,简单来说它和之前在活动中调用startActivity的区别就类似于代码布局和xml中layout布局一样,既简单又可视化,如下图就是一个navigaton的xml图:Navigation多数作用于Fragment中,不过导航组件还支持:Fragment、Ac转载 2021-04-25 15:58:06 · 576 阅读 · 0 评论 -
Android Jetpack组件之 Room使用-源码
2、Room 简介Room是Google提供的一个ORM库。Room提供了三个主要的组件:@Database:@Database用来注解类,并且注解的类必须是继承自RoomDatabase的抽象类。该类主要作用是创建数据库和创建Daos(data access objects,数据访问对象)。 @Entity:@Entity用来注解实体类,@Database通过entities属性引用被@Entity注解的类,并利用该类的所有字段作为表的列名来创建表。 @Dao:@Dao用来注解一个接口或者抽象转载 2021-04-25 15:16:22 · 283 阅读 · 0 评论 -
Android Jetpack组件之 Paging使用-源码
2、Paging简介分页库概述Paging Library中DataSource,PagedList,PagedAdapter三者之间的关系以及数据加载到数据展示的流程比如当一条新的item插入到数据库,DataSource会被初始化,LiveData后台线程就会创建一个新的PagedList。这个新的PagedList会被发送到UI线程的PagedListAdapter中,PagedListAdapter使用DiffUtil在对比现在的Item和新建Item的差异。当对比结束,PagedLi转载 2021-04-25 11:50:09 · 372 阅读 · 0 评论 -
Android Jetpack组件之 LiveData使用-源码
2、LiveData简介LiveData是一个具有生命周期感知特性的可观察的数据保持类,使用LiveData保存数据时,在每次订阅或数据更新时会自动回调设置的观察者从而更新数据,真正的实现了数据驱动的效果 LiveData的创建基本会在ViewModel中,从而使数据在界面销毁时继续保持 LiveData 认为观察者的生命周期处于STARTED状态或RESUMED状态下,表示观察者处于活动状态,LiveData只通知活跃的观察者更新数据 注册一个实现该LifecycleOwner 接口的对象配对的转载 2021-04-25 10:21:07 · 200 阅读 · 0 评论 -
Android Jetpack组件之ViewModel使用
2、VIewModel简介Android框架管理UI控制器的生命周期,例如Activity和Fragment。框架可以决定销毁或重新创建UI控制器以响应完全不受控制的某些用户动作或设备事件,那设想一种情况当用户在界面操作录入了一些信息后,因为某种原因导致Activity重新创建,那此时用户写好的信息呢?如果要重头再来可能有的用户就会不耐烦了,进而减少了使用,可能有人说,可以使用onSaveInstanceState()方法并从包中恢复其数据 onCreate(),但此方法仅适用于可以序列化然后反序列化的转载 2021-04-24 23:15:55 · 539 阅读 · 0 评论 -
Android Jetpack 组件之 Lifecycle源码
二、源码分析关于Lifecycle的使用考上一篇文章Android Jetpack框架之 Lifecycles使用,从使用的方法中我们知道Lifecycle的实现主要依赖:LifecycleObserver、LifecycleOwner;通过像Owner注册Observer实现感知Owner的生命周期,下面一起看看源码是如何巧妙设计的;2.1、生命周期观察者:LifecycleObserver// 实现LifecycleObserverclass MyObserver(var lifecyc转载 2021-04-24 15:00:36 · 126 阅读 · 0 评论 -
Android Jetpack 组件之 Lifecycle使用
二、Lifecycles的作用lifecycles简介:Lifecycles是一个持有组件生命周期状态(如Activity或Fragment)信息的类,并允许其他对象观察此状态。生命周期使用两个主要枚举来跟踪其关联组件的生命周期状态:Event:从框架和Lifecycle类派发的生命周期事件。 这些事件映射到活动和片段中的回调事件。 State:由Lifecycle对象跟踪的组件的当前状态。lifecycles使用场景Lifecycles:生命周期感知组件,从名字中就可以知道,这个方转载 2021-04-24 09:33:14 · 361 阅读 · 0 评论 -
Android Jetpack组件总览
1、前言最近简单看了下google推出的框架Jetpack,感觉此框架的内容可以对平时的开发有很大的帮助,也可以解决很多开发中的问题,对代码的逻辑和UI界面实现深层解耦,打造数据驱动型UI界面。Android Architecture组件是Android Jetpack的一部分,它们是一组库,旨在帮助开发者设计健壮、可测试和可维护的应用程序,包含一下组件:Android Jetpack组件总览 Android Jetpack 组件之 Lifecycle使用 Android Jetpack 组转载 2021-04-23 23:05:15 · 745 阅读 · 0 评论 -
kotlin的Delegates与lateinit对比
首先:The two models are similar, and one predates the other. Delegates.notNull() (api reference) is based on delegated properties and was the original, and later came lateinit (Late Initialized Properties). Neither cover all possible use cases and neither原创 2021-04-20 10:18:32 · 473 阅读 · 0 评论 -
一文就懂Kotlin作用域函数以及object关键字
作用域函数Kotlin 标准库包含几个函数,它们的唯一目的是在对象的上下文中执行代码块。当对一个对象调用这样的函数并提供一个 lambda 表达式时,它会形成一个临时作用域。在此作用域中,可以访问该对象而无需其名称。这些函数称为作用域函数。共有以下五种:let、run、with、apply 以及 also。区别由于作用域函数本质上都非常相似,因此了解它们之间的区别很重要。每个作用域函数之间有两个主要区别:引用上下文对象的方式 返回值上下文对象:this还是itrun、with 以..原创 2021-02-07 21:10:04 · 895 阅读 · 0 评论 -
《From Java To Kotlin》-Kotlin与Java的简单对比
前言:原文来自https://github.com/MindorksOpenSource/from-java-to-kotlin本文也只是简单比较kotlin与java的不同之处,实际学习kotlin还是去官网学习比较好。我个人学习的一个网站贴出来:Kotlin中文网打印日志 Java System.out.print("Amit Shekhar");System.out.println("Amit Shekhar"); Kotlin print("Amit Shek原创 2021-02-06 20:59:05 · 254 阅读 · 1 评论 -
Kotlin 协程:简单理解 runBlocking, launch ,withContext ,async,doAsync
前言Kotlin的协程,本质上是一个线程框架,它可以方便的切换线程的上下文(如主线程切换到子线程/子线程切回主线程)。而平时我们要想在Android Studio使用协程,先要在gradle引入协程依赖:implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.3"implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.3'首先,创建一个原创 2020-08-09 16:38:37 · 8884 阅读 · 0 评论 -
Kotlin特色之object、let、with、run、apply、also函数的使用
前言相比Java,Kotlin提供了不少高级语法特性。对于一个Kotlin的初学者来说经常会写出一些不够优雅的代码。在Kotlin中的源码标准库(Standard.kt)中提供了一些Kotlin扩展的内置函数可以优化kotlin的编码。Standard.kt是Kotlin库的一部分,它定义了一些基本函数。 这个源代码文件虽然一共不到50行代码,但是这些函数功能都非常强大。一、回调函数的Kotin的lambda的简化(object)在Kotlin中对Java中的一些的接口的回调做了一些优化,可以使转载 2020-07-18 15:56:23 · 380 阅读 · 0 评论 -
Kotlin一大特色之空安全
前言kotlin是谷歌推出的Android开发的又一支持语言,没办法,程序猿就是不停的学习。过了一遍基础以后,记录一些kotlin的一些特点。可空类型与非空类型在 Kotlin 中,类型分为可空引用和非空引用。例如,String 类型的常规变量不能容纳 null :var a: String = "abc"a = null // 如果这样写,就会提示错误,要是在java中运行时才会错误当然可以声明变量为可空变量,用 String?var a: String? = "abc原创 2020-07-18 10:44:31 · 292 阅读 · 0 评论