- 博客(10)
- 资源 (10)
- 收藏
- 关注
原创 Android 源码 图形系统之窗口添加
《Android 源码 输入系统之窗口关联》 一节着重考虑了窗口怎样和输入系统关联,而这一节的重点在于窗口如何添加到图形系统。先来看一个整体概览,再来详细分析。先从 setContentView 说起。此函数的作用是:从布局资源设置 Activity 内容。资源将被解析,将所有顶级视图添加到 Activity 中。首先调用 getWindow() 获取 Window 对象(实际为 PhoneWindow 对象),然后调用其 setContentView(…) 方法。frameworks/base/c
2020-06-26 19:06:15 673
原创 Android 源码 图形系统概述
Android 框架提供了各种用于 2D 和 3D 图形渲染的 API,可与制造商的图形驱动程序实现方法交互。应用开发者可通过三种方式将图像绘制到屏幕上:使用 Canvas、OpenGL ES 或 Vulkan。一、Android 图形组件无论开发者使用什么渲染 API,一切内容都会渲染到“Surface”。Surface 表示缓冲队列中的生产方,而缓冲队列通常会被 SurfaceFlinger 消耗。在 Android 平台上创建的每个窗口都由 Surface 提供支持。所有被渲染的可见 Surfac
2020-06-26 19:04:48 867
原创 Android 源码 installd 启动流程分析
installd 进程具有 CAP_DAC_OVERRIDE 特权(Privilege)。对于具有 CAP_DAC_OVERRIDE 特权的进程,Linux 会跳过文件的读、写和执行权限的检查。所以,installd 可以访问任何目录下的文件。system 用户则会受限。而 PackageManagerService 属于系统进程,system 用户并没有访问应用程序目录的权限,这就需要委托给 installd 处理。SystemServer 类 startBootstrapServices() 方法中
2020-06-09 19:41:46 990 2
原创 Android 源码 PackageManagerService 启动流程分析
《Android 源码 installPackage 流程分析》一节着重分析了 apk 安装流程,接下来我们分析 PackageManagerService 启动时都做了些什么?执行 PackageManagerService main 静态方法;调用 PackageManagerService 类 isFirstBoot() 方法;调用 PackageManagerService 类 getUsageStatsIfNoPackageUsageInfo() 方法;调用 PackageManager
2020-06-08 17:45:04 729
原创 Android 源码 installPackage 流程分析
installPackage 安装流程最终会调用 PackageManagerService 对应方法,当然是使用 binder 机制得以实现跨进程通信。先来看看 installPackage 流程具体和各种进程如何关联调用,有个整体印象以后我们再来分析其流程。起点是 ApplicationPackageManager 类 installPackage 方法。frameworks/base/core/java/android/app/ApplicationPackageManager.java/*
2020-06-05 21:47:29 3278
原创 Android 源码 关机流程分析
Power 键长按 3s 可触发设备关机流程,关机我们能想到的有首先结束当前正在运行的界面,接着关闭显示屏,然后各种设备下电,最后设备彻底关闭。在《Android 源码 输入系统之 InputReader》一节中,调用 InputDispatcher 类 notifyKey 方法,其中调用了 InputDispatcherPolicyInterface(mPolicy) 类的 interceptKeyBeforeQueueing 方法,这会拦截关机键输入事件。frameworks/native/ser
2020-06-02 22:05:21 668
原创 Android 源码 输入系统之事件窗口分发
handleReceiveCallback 方法对消息进行处理。上一节打通了 InputDispatcher 和输入窗口之间双向的通道,这是通过 InputChannel 承载的。现在可以继续分析从 InputDispatcher 发送出的事件如何被接收处理了。NativeInputEventReceiver 类 handleEvent 被调用,用来处理 InputDispatcher 发送来的事件。frameworks/base/core/jni/android_view_InputEventRec
2020-06-02 21:36:34 800
原创 Android 源码 输入系统之 InputChannel 通信通道建立
上一节完成了焦点窗口关联,现在可以分析如何将输入事件继续从 InputDispatcher 继续分发。InputChannel 的 sendMessage 将消息发送出去。实际是调用 socket 的 send 接口来发送消息的。具体一点其实使用的是 socketpair。所以我们先来学习 Linux 如何使用 socketpair,然后“破解” InputChannel 通信,最后再去分析输入事件窗口分发。一、socketpair 使用用于创建一对无名的、相互连接的套接字。#include <
2020-06-01 21:22:35 823
原创 Android 源码 输入系统之窗口关联
在前一节中,InputDispatcher 的事件派发工作调用 InputChannel sendMessage 方法标志着 InputDispatcher 一个周期的工作结束。但意味着事件找到对应的窗口处理的开始。上一节中 mFocusedWindowHandle 是 InputDispatcher 的成员变量,它是确定发送事件消息的关键。我们以它为突破口寻找“出路”。mFocusedWindowHandle 在 setInputWindows 方法中进行了赋值,我们需要反推一下。frameworks
2020-06-01 21:20:15 1017
原创 Android 源码 输入系统之 InputDispatcher
InputDispatcherThread 线程负责派发事件。InputDispatcherThread 启动后会执行 threadLoop 函数。threadLoop 函数返回 true,InputDispatcherThread 就会循环执行 threadLoop 函数。具体可以参见关于 Native Thread 实现一节《Android 源码 Native Thread 分析》。InputDispatcherThread(称为“ InputDispatcher”)线程在队列上等待新事件,并异步将其分
2020-06-01 21:18:23 1824
Android发送邮件功能实现
2015-08-16
高仿今日头条字体渐变指示器
2015-04-26
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人