类与对象1. 属性与字段Getters与Settersset方法与get方法中如果需要用到变量,需要用field来表示当前变量而不能直接引用,否则会造成死循环。关键字field表示幕后字段,只能在getter和setter内对它访问。// 正确方法 var gender: String = "Man" set(value) { println("setter $value"
转载 2024-02-04 03:30:58
33阅读
kotlin 协程 lanch 详解前言一、协程是什么?二、传统方式完成异步网络加载和协程的对比2.1:传统方式完成异步任务网络加载2.2:协程方式完成异步任务网络加载2.3:传统方式完成三层回调2.4:协程方式解决三层回调带总结 前言使用纯代码 加 注释的方式,可以更快的理解源码 如果你喜欢,请点个赞,后期会不断的深入讲解一、协程是什么?1.大部分开发者们把协程比喻成:线程的封装框架,从宏观角
转载 2024-09-02 14:24:58
48阅读
作者:heimashi链接:https://github.com/heimashi/kotlin_tips本文由作者投稿发布。汇总Kotlin相对于Java的优势,以及怎么用Kotlin去简洁、务实、高效、安全的开发,每个小点tip都有详细的说明和案例代码,争取把每个tip分析得清楚易懂,会不断的更新维护tips,欢迎fork进来加入我们一起来维护,有问题的话欢迎提Issues。推荐一个Kotli
简介Google官方描述: Flow是基于协程构建的数据流,数据流是可通过异步方式进行计算处理的一组数据序列。所发出值的类型必须相同。例如Flow 是发出整数值的数据流。 数据流与生成一组序列值的 Iterator 非常相似,但它使用挂起函数通过异步方式生成和使用值。这就是说,例如,数据流可安全地发出网络请求以生成下一个值,而不会阻塞主线程。数据流包含三个实体:提供方会生成添加到数据流中的数据。得
转载 2024-05-14 21:10:11
81阅读
以往的开发工作之中,少不了要跟各种异常作斗争,常见的异常种类包括指针异常NullPointerException、数组越界异常IndexOutOfBoundsException、类型转换异常ClassCastException等等,其中最让人头痛的当数指针异常,该异常频繁发生却又隐藏很深。调用一个对象的方法,就会产生指针异常,可是Java编码的时候编译器不会报错,开发者通常也意识不到问题,
引例:private suspend fun intValue1(): Int { delay(1000) return 1 } private suspend fun intValue2(): Int { delay(2000) return 2 } fun main() = runBlocking { val elapsedTime = measu
转载 2023-11-27 11:00:17
93阅读
并发包中的并发 List 只有 CopyOnWriteArray List。 CopyOnWri teArray List 是一个线程 安全的 ArrayList,对其进行的修改操作都是在底层的一个复制的数组(快照)上进行的, 也就是使用了写时复制策略(add/set/remove(修改)时复制新数组进行操作)。原理:采用每add一个元素则复制出一个新数组,此时如果多线程下,add/set/rem
转载 10月前
39阅读
条件if条件判断常用的判断和Java一样,这里提一下不同的用法1.if可以作为三元运算符val max = if (a > b) a else b2.使用in判断是否在某个区间val x = 1 //相当于条件 1<= x <=8 if(x in 1..8){ println("在区间内") } //与上面的条件相反 if(x !in 1..8){ ... }3.is关键字类
转载 2024-09-13 22:16:33
13阅读
# 在 Android 中使用 Timer 定时任务 在 Android 开发中,有时我们需要在特定的时间间隔内执行某些任务,比如更新 UI、定时提醒用户、或者获取数据等。实现这些功能的一种常见方法是使用 `Timer` 和 `TimerTask` 类。在这篇文章中,我们将深入探讨如何在 Kotlin 中使用 `Timer` 配合 `TimerTask` 来实现定时任务,并提供实例代码来帮助理解
原创 11月前
415阅读
一手遮天 Android - kotlin: 可类型,数据类型判断(is, !is),类型转换,可类型的相关操作符(let, ?:, ?, !!, as?),== 和 === 作者 webabcd一手遮天 Android - kotlin: 可类型,数据类型判断(is, !is),类型转换,可类型的相关操作符(let, ?:, ?, !!, a
转载 10月前
191阅读
Android开发过程中,有时我们会面临数组设置的问题。比如,当我们需要在应用中动态地更新数组的内容时,可能会不小心将数组设置`null`,导致应用崩溃。本文将深入探讨这一问题的背景、原因以及解决方案。 ### 背景定位 在Android应用开发中,数组是常用的数据结构之一。然而,数组设置或未初始化的情况,常常可能造成应用的崩溃或异常,影响用户体验。在实际场景中,开发者可能在对数组
原创 7月前
41阅读
DRM in AndroidDRM,英文全称为Digital Rights Management,译为数字版权管理。它是目前业界使用非常广泛的一种数字内容版权保护技术。随着知识产权保护受重视的程度日益提高,快速攻城略地得Android智能手机是如何利用DRM来有效保护数字版权的呢?本文将通过剖析Android中的DRM框架以及相关工作流程来向读者揭示DRM的神秘面纱。一  DRM架构介绍
Android使用Preference API快速实现设置界面在移动应用中,几乎每个应用都有一个叫做“设置”的地方,那里包含了用户对应用的一些设置。几乎每个应用的设置都是差不多的,无外乎外观的一些差别,可是,如果认为就是几个TextView或者EditText控件的简单拼凑,那就太小看系统的设计者了,在Android中,我们使用Preference这一类和相关的API实现我们并不会在布局文件中写具
首先看几段代码代码段一fun String.i(TAG: String = ">>>>") { if (BuildConfig.DEBUG) Log.i(TAG, this) }代码段二fun String.e(TAG: String?) { if (BuildConfig.DEBUG) Log.i(TAG ?: ">&
转载 2023-09-26 08:41:00
128阅读
文章目录I. 开启协程的示例i. `launch()` 是 `CoroutineScope` 的扩展函数ii. `async()` 也是`CoroutineScope` 的扩展函数iii. `runBlocking()` 就是一个函数II. kotlinx 协程库中 `CoroutineScope` 族谱i. 族谱ii. 挂起函数 `coroutineScope()`III. `Job`、`De
目录kotlin用于android开发kotlin的基本语法:for循环when表达式代码规范目录结构源文件名称源文件组织类布局接口实现布局重载布局kotlin用于android开发使用kotlin进行android开发:代码更少,可读性强,花费更少的时间来编写代码与理解其他人编写的代码kotlin不仅仅是语言,也是一个强大的工具.并且他还在一直发展.目前kotlin已经完美的集成到android
类型和智能类型转换 字符串被设定为不能为null。例如:fun getName():String{ return null; }上面这样的代码段编译不会被通过,提示字符串不能被返回空值。 因此,下面一小段代码是指针安全的。fun main(args:Array<String>){ println(getName().length) }如果要定义可以返回空值的字符
Baseadapter 正文   一、结构 public abstract class BaseAdapter extends Object implements ListAdapter SpinnerAdapter java.lang.Object android.widget.BaseAdapter  直接子类   &nbsp
目标在kotlin中使用Timer执行定时任务.解决方案class MainActivity : AppCompatActivity() { lateinit var timer: Timer override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceSt...
原创 2022-02-25 16:00:02
522阅读
目标在kotlin中使用Timer执行定时任务.解决方案class MainActivity : AppCompatActivity() { lateinit var timer: Timer override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceSt...
原创 2021-10-19 15:14:05
1050阅读
  • 1
  • 2
  • 3
  • 4
  • 5