0%

概述

协程系列文章:

Channel 类似于 Java 的 BlockingQueue 阻塞队列,不同之处在于 Channel 提供了挂起的 send() 和 receive() 方法。另外,通道 Channel 可以被关闭表明不再有数据会进入 Channel, 而接收端可以通过 for 循环取出数据。

Channel 也是生产-消费者模式,这个设计模式在协程中很常见。

阅读全文 »

概述

Flow 需要在协程中使用, 分析 flow 工作流程离不开协程的工作原理,关于 Kotlin 协程的解析可以参考下列文章:

个人觉得 Kotlin协程之再次读懂协程工作原理 分析比较易懂,有需要的同学可以移步看看。

阅读全文 »

概述

关于协程的创建,以及挂起和恢复,之前有写过一篇文章 Kotlin协程之深入理解协程工作原理 整理这个流程,最近再看这篇文章的时候,感觉看起来比较费劲,不是说写得有问题,只是看起来比较臃肿。如果想再复习这块的知识,可能需要看几遍后才能懂,所以想另外再整理一篇文章写写协程启动,挂起和恢复的原理,适合在读完上篇文章后再看看,这篇文章的目的在于希望读完后能够清晰明了地了解 Kotlin 这部分的原理,提高效率。Kotlin 协程系列:

阅读全文 »

概述

最近线上监控发现 OOM 涨幅较大,因此去尝试定位和修复这个问题,在修复了一些内存泄漏和大对象占用问题后, OOM 依旧未达到正常标准,在这些新上报的 hprof 文件中,发现几乎所有 case 中都有个叫 FinalizerReference 的对象,数量巨多,内存占用高居首位,因此判断它就是引起本次 OOM 上涨的罪魁祸首。

阅读全文 »

前言

架构学习之路系列

这是架构学习系列的第二篇,主要介绍一下 UML 图,设计原则以及设计模式。这些名词大家估计都耳熟能详了,它们对于架构而言非常重要,只有理论结合实际,以后才会越来越娴熟。在开始做需求的时候,先别急着写代码,思考一下这个需求的本质是干嘛,用面向对象的思想去抽象这个过程,不是直接搞几个类就可以了的。

阅读全文 »

架构是什么

架构学习之路系列

这是架构学习系列的第一篇,随便讲几句。对于架构,我也有些一知半解,读了一些架构相关的文章,结合实际项目经历,有了自己的一些理解。

关于架构是什么?这点可以顾名思义去看,架构=+,即整体的一个架子和各个组件之间的组合结构。当然可能不同的程序员对于项目架构的风格和习惯不一样,但是底层的思想应该都是类似的,诸如我们可能听到起了茧子的“关注点分离”,“低耦合高内聚”,“可扩展可复用易维护”等等,听完这些话,感觉自己懂了,又感觉啥也不懂,好像有所收获了,准备开始写代码的时候,脑子里想的可能又是“工期太赶了,就这样写吧,反正干完这几票就跑路了”。

阅读全文 »

概述

重阳已过,中秋将至,想起农村老家,这个季节到了晚上,偶尔会比较凉爽,甚至有些凉意。不禁想吟词一首:

1
2
3
4
      定风波·湖村晚
苍耳叔叔
湖面蒹葭荡影重,黄昏渐映水寒清。远处人家声影乱,亲唤,小童归去老村惊。
月上枝头双戏景,微冷,农家秋月夜燃灯。灯影幢幢人影瘦,浊酒,菜花香入梦回轻。

好吧,这其实是一篇技术文章。周末闲来没事,看到了掘金的中秋投稿活动,正好写个“守护月饼”的小游戏来玩玩,游戏名和游戏 UI 都是我瞎扯的~直接上效果图:

阅读全文 »

概述

这篇文章介绍一下 SurfaceView, GLSurfaceView 以及 TextureView 的基础用法及一些区别。

  • SurfaceView: View 的子类,但不与宿主 Window 共享 Surface, 而是有自己独立的 Surface, 且可以在一个独立的线程中进行绘制,因此 SurfaceView 一般用来实现比较复杂的图像或动画/视频的显示。可以参考 Android双缓存与SurfaceView。由于其内容是绘制在一个独立的 Surface 上,因此无法用 scrollTo/By 等方法去移动操作 Canvas 里的内容,但是可对整个 View 进行平移,缩放,旋转等变换操作。
  • GLSurfaceView: 基于 SurfaceView 再次进行扩展,在 SurfaceView 基础上封装了 EGL 环境管理以及 Render 线程,专门为 OpenGl 显示渲染使用。参考 Android-OpenGL-ES笔记
  • TextrueView: Android 4.0 后引入 TextureView, 它将 SurfaceTexture 和 View 结合到了一起。与 SurfaceView 相比,它并没有创建一个单独的 Surface 来绘制,解决了 SurfaceView 无法在 Canvas 内容上做动画的问题。另外 TextureView 必须在硬件加速开启的窗口中使用。
阅读全文 »