The DEV Lyrics.

Thinking will not overcome fear but action will.

避免使用finalize()方法

finalize 和 cleaner 都应该尽量避免使用

Synopsis 我们知道 GC 只能回收那些使用 new 关键字分配的内存空间。如果是使用 native method 调用 C/C++ 方法 malloc() 函数系列来分配内存空间的话,必须调用 free() 函数来释放,否则这些内存空间就不会被释放,可能导致内存泄漏。因为 free() 方法是 C/C++ 中的函数,所以可以在 finalize() 中使用本地方法来调用它来释放内存。...

SharedPreferenceImpl 源码解析

解决使用异步提交操作 apply 也会出现 ANR 的困惑

Synopsis 如果有使用到 SharedPreference 的同学,采用 apply 操作来异步提交数据到本地的话,可能就会在崩溃平台上遇到这种 ANR: DALVIK THREADS (62): "main" prio=5 tid=1 Waiting | group="main" sCount=1 dsCount=0 obj=0x76eb4a20 self=0x7f8f09a00...

主要介绍 VSYNC、三重缓存

Synopsis Google 在 Android4.1 提出了 Project Butter 用于提升系统流畅度。Project Butter 对 Android Display 系统进行了重构,引入了 VSYNC(垂直同步)、Triple Buffer(三重缓存) 和 Choreographer。 Problems 在一个典型的显示系统中,一般包括 CPU、GPU、display 这3...

GPU 呈现模式分析

Synopsis GPU 呈现模式分析工具展示了一个滚动的直方图来展示它渲染每一帧的时间。如下图所示,它展示了一个直方图,中间的横线就是这个屏幕刷新频率16fps,我们最好将柱子都控制在它之下。 Enable the profiler 按如下步骤来启用设备的 GPU 渲染分析工具: 进入设置 -> 开发者选项 在监控区域点击GPU 呈现模式分析 选择在屏幕上显示为条形...

Choreographer

Synopsis 该类是用于协调动画、输入和绘图的时间。它接收来自显示子系统的时间脉冲(如垂直同步信号),然后安排下一帧的渲染工作。应用程序一般不直接与它进行交互,而是在动画框架或者 view 层级中使用更高级的抽象来进行操作。 constructor private Choreographer(Looper looper, int vsyncSource) { /...

View 动画源码解析

Synopsis 前面在 Android 动画基础中已经简单讲了 View 动画的基本用法,本文将通过一个简单的例子来介绍 View 动画的内部原理。 Sample val alphaAnim = AlphaAnimation(0f, 1f) alphaAnim.duration = 3000 button.startAnimation(alphaAnim) Let’s make it...

动画插值器-Interpolator

没有插值器的动画是没有灵魂的

Synopsis 所谓的插值器就是用于控制动画的速度的。我们知道,像补间动画,只需要定义动画的第一帧和最后一帧,系统就能将中间帧都生成出来,而生成这个中间帧的过程就叫插值。默认的,动画变化是线性的,而现实生活中,动画往往是非线性的,如球从空中落下是一个重力加速度的加速过程,而刹车则是一个减速过程,为了让我们的动画更加自然,Android 提供了 Interpolator 来实现非线性动画的能...

Android 动画基础

主要介绍动画的几个种类以及基本使用

Synopsis Android 动画分为3种: View 动画: 补间动画:通过对图像进行平移、旋转等产生动画效果。 帧动画:通过顺序播放一系列图像从而产生动画效果。 属性动画:动态地改变对象的属性从而达到动画效果。 问题来了,为什么有 View 动画,还要推出属性动画? View 动画(主要是补间动画)机制本身就比...

HashMap

HashMap 源码解析

Synopsis 本文主要讲解 HashMap 中比较重要的部分,如 threshold, hashcode,resize 等。 Node HashMap 中,每一个元素都是一个结点(Node): static class Node<K,V> implements Map.Entry<K,V> { final int hash; ...

LinkedHashMap

LinkedHashMap 源码解析

Synopsis LinkedHashMap 是将 HashMap 和双向链表相结合的产物,拥有了 HashMap 的特性外还保持了迭代的顺序。LRU Cache 内部就是通过 LinkedHashMap 实现的。 LinkedHashMap 与 HashMap 有什么不同 结点不同 LinkedHashMap 的结点是继承自 HashMap.Node,并添加了 before ...