主页

Android 系统架构 —— PKMS 的启动 之 备份文件的解析

前言

在 SystemService 进程启动时, 会将 PackageManagerService 启动起来, 这是一个应用资源管理的服务

public class PackageManagerService {

    public static PackageManagerService main(Context context, Installer installer,
            boolean factoryTest, boolean onlyCore) {
        ......
        // 创建了 PackageManagerService 对象, 并且将它添加到 ServiceManager, 用于对外界提供功能支持
        PackageManagerService m = new PackageManagerService(context, installer,
                factoryTest, onlyCore);
        ......
        ServiceManager.addService("package", m);
        // 返回了一个 PackageManagerService 对象
        return m;
    }
    
}

因此我们从 PackageManagerService 的构造函数来探查 PKMS 的启动流程

阅读更多

Camera 开发实战(一)——预览尺寸的选取与旋转角度的设定

前言

经过 OpenGL ES 的系统学习, 这里通过 Camera 开发, 来对学习的成果进行一次验收

Camera 在音视频的世界中, 就像我们的眼睛一样, 是负责图像采集的入口, 要想实现一款高可用的 Camera, 我认为需要关注以下几个方面

  • 相机的预览
  • 相机的拍摄
  • 相机的录制

OpenGL ES 主要用于图像的渲染, 因此这里主要聚焦于相机的预览, 想要让相机的数据呈现到我们屏幕上, 主要有如下几个步骤

  • 相机预览帧尺寸的选取
  • 相机预览帧旋转角度的设定
  • 使用 OpenGL ES 渲染数据

可以看到每一步想要做好都是挺有挑战性的, 本篇主要分析 相机预览帧尺寸的选取相机预览帧旋转角度的设定 这两个问题

阅读更多

Android 性能优化 —— MMKV 优化轻量级存储

前言

APP 的性能优化之路是永无止境的, 这里学习一个腾讯开源用于提升本地存储效率的轻量级存储框架 MMKV

目前项目中在轻量级存储上使用的是 SharedPreferences, 虽然 SP 兼容性极好, 但 SP 的低性能一直被诟病, 线上也出现了一些因为 SP 导致的 ANR

网上有很多针对 SP 的优化方案, 这里笔者使用的是通过 Hook SP 在 Application 中的创建, 将其替换成自定义的 SP 的方式来增强性能, 但 SDK 28 以后禁止反射 QueuedWork.getHandler 接口, 这个方式就失效了

因此需要一种替代的轻量级存储方案, MMKV 便是这样的一个框架

一. 集成与测试

以下介绍简单的使用方式, 更多详情请查看 Wiki

阅读更多