深入理解Kotlin协程(三)——Kotlin协程框架初探(一) 前面四篇文章我们了解了如何使用createCoroutine和startCoroutine这两个API来创建和启动简单协程,并且可以使用它们来构造复合协程。但客观的说,这两个API并不太适合直接在业务开发中使用,所以Kotlin协程为开发者提供了一些更贴近业务的复合协程API,即官方协程框架kotlinx.coroutines。后面几篇文章我们就来尝试窥探一下这个庞大的框架的一角。 协程的描述对于 2021-02-16 Kotlin Coroutines
深入理解Kotlin协程(二)——复合协程 本篇文章我们将基于简单协程实现几种复合协程。 序列生成器仿Python的Generator实现Python中的Generator可以在函数中调用yield将当前函数挂起并返回yield的参数,效果如下: 12345678910111213141516171819val nums: (Int) -> Generator<Int> = generator { start: 2021-02-05 Kotlin Coroutines
深入理解Kotlin协程(一)——基本概念与原理 协程的基本概念在当前主流的计算机操作系统中,进程和线程是我们比较熟悉的东西。在早期的计算机系统中,并没有线程的概念,而进程是操作系统进行资源分配和调度的基本单位,也是程序执行的最小单位,每个进程都有其单独的内存空间,使得进程之间的内存相互独立。随着计算机的发展,越来越多的场景需要多任务并发执行,而进程的创建、切换、销毁开销大,且进程之间内存无法共享等问题无法满足复杂的场景需求,这些问题促使了线程的 2021-02-01 Kotlin Coroutines
刷题笔记 滑动窗口滑动窗口可以解决子结构中求最值问题,例如: 3. 无重复字符的最长子串 76.最小覆盖子串 643. 子数组最大平均数 I 992. K 个不同整数的子数组 解决滑动窗口问题包含几个步骤: 确定窗口大小 移动右指针使得窗口最大,更新结果 移动左指针缩小窗口,使得窗口保持最大,更新结果 要理解滑动窗口不难,难点在于如何正确的把所有细节都写出来,以 无重复字符的最长子串为例: 给定一 2020-12-22 Algorithm BinarySearch
Android Studio金丝雀版更新 原生View Binding要来了? 前言今天Android Studio推特放出了Android Studio 3.6 Canary 11的更新日志,终于是在IDE层面支持了View Binding。 View Binding大家肯定都用过,常用的有Data Binding、ButterKnife和Kotlinx,一般来说Java项目中ButterKnife用的多,kotlin项目的话kotlinx synthetic用起来更快、更 2019-09-12 Android Basics View Binding
Android性能优化之OOM 前言OOM全称为Out Of Memory,内存溢出,指的是请求的内存超过了剩余内存的容量。在Android中,App中已经使用的内存加上新申请的内存大于Android系统分配给App进程的最大内存时,就会发生OOM,导致程序直接崩溃,使得我们的App的用户体验非常糟糕。因此如何避免OOM就成了Android内存优化中比较关键的一点, 这篇文章就是关于内存优化中如何避免OOM的总结性概要文章。 5 2019-03-20 Performance Optimization OOM
Android性能优化之Bitmap高效加载 为什么Bitmap需要高效加载?现在的高清大图,动辄就要好几M,而Android对单个应用锁施加的内存限制,只有小十几M,如16M,这导致加载Bitmap的时候很容易出现内存溢出。如下异常信息,便是在开发中经常需要的: java.lang.OutofMemoryError:bitmap size exceeds VM budget 为了解决这个问题,就出现了Bitmap的高效加载策略。假设通 2019-03-06 Performance Optimization Bitmap
LinkedHashMap原理 概述之前文章讲了HashMap。HashMap是一种非常常见、非常有用的集合,但在多线程情况下使用不当会有线程安全问题。 大多数情况下,只要不涉及线程安全问题,Map基本都可以使用HashMap,不过HashMap有一个问题,就是迭代HashMap的顺序并不是HashMap放置的顺序,也就是无序。HashMap的这一缺点往往会带来困扰,因为有些场景,我们期待一个有序的Map。 这个时候,Linke 2019-02-16 Data Structure LinkedHashMap
Java中的线程池 前言Java中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序都可以使用线程池。在开发过程中,合理地使用线程池能够带来3个好处。第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。第三:提高线程的可管理性。线程是稀缺资源,如果无限制地创建,不仅会消耗系统资源,还会降低系统的稳定性, 2019-02-10 Java Basics ThreadPool