主页

Facebook —— Fresco 一次加载流程

前言

之前一直使用的是 Glide 图片加载框架, 最近接触了 Fresco 这款出自 Facebook 的图片加载框架, 为了方便后期对其进行封装与拓展, 这里分析记录一下它的一次简单的加载流程

关于 Fresco 的简单使用可以参考 Fresco 使用文档, 与 Glide 不同, 它主要是通过 DraweeView 对上层提供便捷性的服务, 文章主体分为如下几个部分

  • Fresco 初始化
  • SimpleDraweeView 的创建
  • 数据的加载

阅读更多

Jetpack —— Navigation 导航组件

前言

最早接触这个组件是在 18 年 Google IO 大会上, 当时看到他们展示了可视化的导航图, 感觉挺有意思, 不过并没有弄明白它到底有何作用

直到最近接触到的新项目中使用了这个组件之后才明白它的妙用, 为了更好的使用和拓展 Navigation 的功能, 这里笔者分析一下它的实现原理

关于 Navigation 的用法说明, 可以参考 Android Developer 文档, Google 还提供一个学习的 sample

阅读更多

《人类简史》笔录

前言

春节假期漫长, 而且肺炎当头无法外出, 武汉加油, 中国加油, 希望快些好起来

这段时间在享受天伦之乐的同时花了些时间将号称 互联网圣经的«人类简史» 通读了一遍, 这里做一下笔录方便日后的回顾

阅读更多

Android NDK —— GIFLIB 优化 Glide GIF 的加载

前言

我们知道 Glide 的图片框架是可以直接加载 GIF 图的, 笔者在监控项目内存使用的过程中, 发现 Gif 图过大时其内存消耗比较严重, 动画播放时伴随着稍许卡顿

这里我们系统的探究一下 Glide 的 GIF 加载原理和优化措施, 主要内容如下

  • Glide 的 Gif 播放原理
  • Glide 加载 GIF 卡顿探究
  • Gif 加载的优化

阅读更多

Android 系统架构 —— Choreographer 的工作机制

前言

在 ViewRootImpl 的创建过程中, 我们看到了它会通过 Choreographer.getInstance 获取到 Choreographer 对象

public final class ViewRootImpl implements ViewParent,
        View.AttachInfo.Callbacks, ThreadedRenderer.DrawCallbacks {
    ......
    
    Choreographer mChoreographer;
     
    public ViewRootImpl(Context context, Display display) {
        ......
        mContext = context;
        ......
        // 获取渲染编舞者实例对象
        mChoreographer = Choreographer.getInstance();
    }

}

这里我们就深入的了解一下 Choreographer 的工作机制, 主要内容如下

  • Choreographer 的创建
  • VSYNC 信号的分发

接下来先看看它的创建流程

阅读更多

Android 系统架构 —— 开机启动篇 概览

前言

Android 的系统是基于 Linux 的, 因此它的启动与 Linux 是相似的, 主要分为两个阶段

  • BIOS 阶段
    • BIOS 在主板的 ROM 中存储, 加电之后便会启动
  • bootloader 阶段, 读取磁盘上的操作系统
    • 0 号进程
      • 所有进程的祖先, 这是 Linux 唯一一个没有通过 fork 或者 kernel_thread 产生的进程
      • 初始化进程管理、内存管理, 初始化驱动程序 Display, Camera Driver, Binder Driver 等相关工作
    • 1 号进程(init 进程)
      • 为用户进程, 是所有用户态进程的祖先
    • 2 号进程
      • 为内核进程, 负责内核态所有进程的管理和调度, 是所有 Linux 内核进程的祖先

阅读更多

Android 系统架构 —— 资源的查找与打开

前言

在前面的学习中, 我们学习了资源管理器的初始化流程, 了解应用程序的资源是在什么地方管理的, 先回顾一下资源管理对象之间的依赖

资源管理整体依赖图

我们知道我们在开发过程中使用的资源主要有两种

  • 一种是通过文件相对路径访问的 asset 资源
  • 另一种是通过 ID 访问的 res 资源

它们访问的入口均为 Resources 对象, 也就是说最终会通过 AssetManager 获取真正的数据, 这篇文章就以获取 layout 的 XML 资源为例, 学习一下资源获取的流程

阅读更多