降Compose十八掌之『亢龙有悔』

5 月 15 日
阅读 5 分钟
23
Jetpack Compose是新一代的声明式的UI开发框架,由Google在2019年推出,最初是作为Android的新式UI开发框架,但它本质是一个声明式UI开发框架,并不受制于底层的平台,现在的Compose已有跨平台开发能力,但Android上的UI开发仍是最主要的使用领域,深受Android开发者喜爱。计划将用一系列文章,并开辟专栏来学习Compose...

优雅的训服大模型:深入浅出Prompt技巧

5 月 8 日
阅读 3 分钟
37
ChatGPT以降,彻底引爆了AI,大模型进入了公众视野,每个人都可以享受AI带来的乐趣。大语言模型(Large Language Model LLM)虽然可以达到「类人」的水平,但仍需要以「大模型角度」去思考和对话才能最大限度的利用大模型的威力。这便是Prompt Engineer需要做的事情。今天就让我们学习总结一些Prompt技巧,以能优雅的训...

教你用最优雅的方式把玩大模型

5 月 1 日
阅读 3 分钟
35
人工智能(Artificial Intelligence)几乎与计算机科学一样古老,在二十世纪50年代被首次提出,在60年代就已经形成比较成熟的理论。但受制于算力和数据,直到二十一世纪第一个10年后才有了重大突破(深度学习和CNN),并在第二个10年正式爆发(大模型)。2022年秋OpenAI的ChatGPT 3横空出世,让AI第一次达到「类人」层次...

实战技巧:Android 14适配从挂号到出院

4 月 24 日
阅读 4 分钟
51
啥?这都4202年了,你的应用还没有升级到targetSDK 34?莫慌,本文就带着你全面的了解升级targetSDK 34的方法以及避坑指南。

一文搞懂Kotlin符号处理接口KSP

4 月 17 日
阅读 5 分钟
50
Kotlin符号处理(Kotlin Symbol Processing)即KSP是可以用于开发轻量级编译器插件的一套API。是Kotlin原生的,Kotlin语法友好的编译器插件。使用简单且易于上手,可以实现一些非常强大的编译时代码处理功能,如代码生成和代码检查。今天就来学习一下KSP的基本原理,以及如何使用KSP API。

深入理解并学会运用Kotlin注解

4 月 10 日
阅读 6 分钟
71
注解(Annotations)允许我们在代码中添加元数据(Meta data),提供代码以外的信息,这些元数据可以在编译时被编译器或其他工具读取和处理。 Kotlin作为一种功能强大且易于使用的多范式通用编程语言,注解(Annotations)是其核心特性之一。在Kotlin中,注解的使用非常广泛,可以用于框架设计、代码生成、测试、依赖注...

深入浅出Java注解原理与应用

4 月 6 日
阅读 8 分钟
159
在Java编程语言中,注解Annotations是一种元数据,能提供代码以外的信息,是元编程的一种体现形式。注解的引入极大的增强了Java语言的元编程能力,能在编译时生成代码,大大减少了重复代码,让Java具有了相当高的动态特性,让一些高级技术如依赖注入,AOP等成为可能。今天将从基础使用,核心概念理解和创建自定义注解三...

深入研究Kotlin运行时的泛型

3 月 27 日
阅读 3 分钟
82
通过前面的学习,对Kotlin的泛型已经有了比较全面的了解了,泛型的目的是让通用的代码更加的类型安全。现在我们离写出类型安全的泛型代码还差最后一块拼图,那就是泛型的类型擦除,今天就来深入地学习一下运行时的泛型,彻底的弄懂类型擦除的前因后果,并学会如何在运行时做类型检查和类型转换,以期完成拼图掌握泛型,...

理解并运用Kotlin的委托机制

3 月 23 日
阅读 3 分钟
75
委托或者说委派,是一种设计机制,实现者并不真正的实现某些方法(行为),而是让另外一个对象来当真正的实现者。委拖与依赖注入和延时加载技术结合在一起会产生非常巨大的威力,让代码不但灵活方便扩展,也非常的优雅,但确实会较难以理解。委托机制(Delegation)在Kotlin中的支持是很友好的,并且非常完善,用关键字by...

Kotlin函数进阶玩法

3 月 22 日
阅读 3 分钟
51
Kotlin中的函数是一级对象,除了常规的函数式编程以外,还支持一些非常灵活的特殊用法,可以大大增强代码的可读性和简洁性,让代码更加的优雅,在业界顶级的库如Compose中有大量的应用,今天就来学习一些,以扫清学习Compose的障碍。

深入浅出Kotlin作用域函数

3 月 21 日
阅读 5 分钟
92
Kotlin是基于JVM衍生出来的新一代通用编程语言,它的目标是简洁,可读和高效,这里的高效并不是代码的运行效率高,而是说项目的开发效率高。Kotlin有太多的小巧的新特性(在Java眼中就是语法糖),比如在Kotlin中有几个作用和用法都非常接近的函数apply/with/run/let/also,它们的正统名字是作用域函数(Scope functions)...

再次深入解析Kotlin泛型

3 月 20 日
阅读 6 分钟
50
在前面的文章中学习Kotlin泛型的基本知识,并且又用了一篇文章来复习了一下Java语言的泛型,有了这些基础我们就可以继续深入的学习Kotlin的泛型了。看它是如何解决Java泛型的遗留问题,再学习一下它的高级特性,最后再总结泛型的最佳实践。

Kotlin进阶之协程从专家到出家

3 月 19 日
阅读 13 分钟
73
协程Coroutine是一种轻量级的实现异步的方式,是代码执行的控制框架,是最新式的并发编程范式。它在使用上大大简化了以往多线程并发带来的种种麻烦(如状态同步和锁),最大的优势就是它是纯编程语言层面实现的,不受制于操作系统,因此它不会阻塞。在前两篇基础之上,今天再来深入的理解一下各种概念,并脱去协程华丽的...

Kotlin进阶之协程从上车到起飞

3 月 18 日
阅读 22 分钟
73
通过前面的一篇文章我们理解了协程的基本概念,学会协程的基本使用方法,算是正式入门了,接下来就是要深入的学习技术细节和高级使用方法,以期完全掌握Kotlin协程并能熟练的正确的使用协程,发挥出协程应有的并发编程能力。

Kotlin进阶之协程从入门到放弃

3 月 17 日
阅读 10 分钟
50
协程Coroutine是最新式的并发编程范式,它是纯编程语言层面的东西,不受制于操作系统,轻量级,易于控制,结构严谨,不易出错,易于测试,工具和配套设施都比较完备。在新生代编程语言(如Kotlin和Swift)中支持良好,在Kotlin中有着非常友好的支持,并且是写异步和并发程序的推荐方式。为了彻底学会使用协程和理解协程...

Kotlin进阶之内部DSL

3 月 14 日
阅读 2 分钟
85
DSL Domain Specific Langauge是解决特定领域内问题的编程语言,它的特点通常是简洁,虽不通用,但可读性强,呈描述式和声明式,比较典型的例子就是SQL语句和正则表达式,以及一些文本处理工具如Sed和AWK。与之对应的就是通用编程语言GPL General Purpose Language,能解决几乎所有的计算机问题,没有为特定领域进行定制...

深入浅出Java泛型

3 月 12 日
阅读 6 分钟
96
在前面的一篇文章中学习了Kotlin的泛型知识,但总感觉还不够深入,因为一些深入的话题和高级的特性并未有讲清楚。但在继续深入之前还是有必要重温一下Java的泛型知识,这是因为Kotlin是基于JVM的语言,并且与Java关系暧昧,它可以与Java混合使用,可以相互调用,在某种程度上讲Kotlin可以视为Java的一种『方言』。所以,...

这回就好好聊聊Kotlin的泛型

3 月 5 日
阅读 5 分钟
117
泛型(Generics)是静态强类型编程语言中非常强大的特性,可以极大的加强代码的复用,并增强类型安全,减少运行时的类型转换错误。在这篇文章就来详细的学习一下Kotlin中对泛型的支持情况,并学会写出类型安全的可复用代码。

一文带你吃透Kotlin类与对象

2 月 27 日
阅读 4 分钟
491
Kotlin是多范式通用编程语言,对面向对象编程(OOP)自然也提供了全方位的支持。通过先前一篇文章,学习了使用Kotlin进行基本面向对象编程的方法,本文将在前文基础之上继续深入的学习面向对象编程的高级特性,以能够写出更加符合OO的代码,并能够从容应对一些复杂的OOP场景。

专家之路上的Flow高级秘籍

2 月 20 日
阅读 8 分钟
843
学习与河流一样,一方面学无止境,又是逆水行舟,不进则退,因为其他人都在卷。前文一篇文章讲了Flow的基础,大多数情况下够用了,但是不能停止卷,因为你不卷,就会被别人卷。一旦涉及到复杂的应用场景,就需要用到一些高级的API。今天就来学习一下Flow的高级特性,当遇到问题时也能更从容的应对。

包教包会的Kotlin Flow教程

2 月 18 日
阅读 13 分钟
820
Kotlin中的Flow是专门用于处理异步数据流的API,是函数响应式编程范式(Functional Reactive Programming FRP)在Kotlin上的一个实现,并且深度融合了Kotlin的协程。是Kotlin中处理异步数据流问题的首先方案。今天就来认识一下Flow并学会如何使用它。

让你从此不再惧怕ANR

2023-12-11
阅读 16 分钟
590
当一个Android应用的UI线程被阻塞时间过长,系统就会发出一个臭名昭著的“应用程序未响应”(ANR, Application Not Responding")错误。本文将讲述不同类型的ANR,如何分析以及如何解决。文中列出的所有的超时时间范围都是基于AOSP和Pixel设备;这些时间范围可能会依OEM厂商而不同。

实战技巧:为Android应用设置独立的多语言

2023-12-04
阅读 4 分钟
683
通常情况下多语言的设置都在系统设置中,应用需要做的就是提供本应用所使用的字串的多语言翻译,使用时使用R.string.app_name类似的引用,然后系统会根据用户在系统设置中的选项来选择合适的具体的语言。并且这是一个全局选项,也就是说选择一个多语言后整个手机都变了。但有些时候,应用想要自己能够设置一个独自的多语...

Kotlin学习之集合

2023-11-27
阅读 4 分钟
376
现代的软件一般比较复杂,程序语言中的基本数据类型往往不能满足需要,除了基本的数据类型以外,还有对象的容器也非常的重要,比如线性容器(数组,列表和Set)和二维容器(哈希表)等。今天就来学习一下Kotlin中的容器。

Kotlin学习之函数

2023-11-20
阅读 7 分钟
394
函数对于编程语言来说是极其重要的一个组成部分,函数可以视为是程序的执行,是真正活的代码,为啥呢?因为运行的时候你必须要执行一个函数,一般从主函数入口,开始一个套一个的函数调用。函数更能体现程序的运行。特别是近些年函数式编程的编程范式开始广泛流行,让函数的地位再次在各种语言中都得到了极大的进升。对...

Kotlin之控制语句和表达式

2023-11-13
阅读 4 分钟
354
有结果返回的是表达式,没有返回的称之为语句,语句最大的问题是它没有返回值,那么想要保存结果就必然会产生副作用,比如改变变量。很多时候这是不够方便的,并且在多线程条件下,这甚至是不安全的。Kotlin中,为了加强线程安全性和方便并发和异步,因此绝大多数语句都是表达式。

Kotlin基础数据类型和运算符

2023-11-06
阅读 5 分钟
370
与大部分语言不同的是,在Kotlin中一切皆为对象(Everything is an object),它没有像Java/C++那样,是没有基础数据类型(primitive types)的,都是对象,因此也不会有像Java那样的box和auto box的麻烦。box和autobox对于单独使用基础数据类型时没啥问题,比如一个方法add(Integer),会进行自动装箱和拆箱。但如果在集合中...

Java集合操作集锦

2023-10-31
阅读 8 分钟
264
集合是最为常见的容器,在日常工作之中经常用到,一些集合的常规操作以及不同的集合之间的转换,虽然看似是基础中的基础,但实践中会发现并不是那么显而易见的,特别是涉及boxing的时候,这篇就是想总结 出一些最优的方式来进行集合操作和转换。

Java中整数基础知识

2023-10-23
阅读 4 分钟
181
最近做了一道题,非常有意思,题本身很简单,但涉及到整数的最大值以及最小值,当写测试用例的时候,却犯了一个错误,发现最小整数并不是0xFFFFFFFF,我们来仔细看一下。

解惑Android Scoped Storage

2023-10-16
阅读 4 分钟
316
安卓对于文件存储这块,其实是相当混乱的,在早期的版本中对存储甚至是没有所谓的管理的,有多种方法可以操作文件存储,比如通过Java原生的方式(File/InputStream/OutputStream),以及通过ContentProvider的方式(openFile/openOutputStream)。文件的路径也是相当混乱的,有公共存储区域,App的沙盒,外部存储中的App沙盒...