- 博客(311)
- 资源 (35)
- 收藏
- 关注
原创 Android Audio实战——静音设置(十七)
对于音量调节,对于车机 Audio 开发来说是相当重要的一个功能,主要分为系统音量、通话音量、导航音量、铃声音量、语音音量(微信等第三方应用)等。前面已经对音量调节有了详细分析分析,但这里还是有必要对音量静音功能进行分析。
2023-11-10 11:23:30 433
原创 Android WMS——窗口动画启动(十七)
上一篇文章主要介绍了触发添加窗口动画和加载动画资源,接下来开始进一步触发,对动画的参数进行了进一步设置。
2023-11-03 17:51:39 87
原创 Android WMS——窗口动画触发及加载(十六)
Android 窗口动画是 Android 系统动画的一种,当一个非 Activity 主窗口,非壁纸窗口添加或者移除的时候会触发 Android 窗口动画的流程,例如 Toast 的弹出或者移除的过程中就会触发窗口动画。我把窗口动画的执行流程大概分为以下几步:触发添加窗口动画加载对应的动画资源创建 leash,同时把执行动画的窗口容器 reparent 到 leash 上开始循环执行窗口动画动画结束,把执行动画的窗口重新 reparent 到该容器原来的父节点上。
2023-11-02 16:18:42 238
原创 Android WMS——窗口动画基础(十五)
下面是一些与动画管理相关的概念和功能:窗口动画(Window Animation):窗口动画是指在窗口打开、关闭、切换等状态转换过程中应用的动画效果。WMS 会根据窗口的状态和属性,在发生状态变化时执行相应的动画。例如,当窗口从最小化到恢复时,可以应用淡入或滑动的动画效果。转场动画(Transition Animation):转场动画是指在不同的屏幕间进行切换时应用的动画效果。例如,当从一个应用切换到另一个应用时,可以应用淡入淡出、滑动等动画效果,以平滑地切换界面。
2023-11-02 15:53:17 372
原创 Android WMS——WMS窗口更新移除(十四)
前面通过几篇的文章详细的介绍了 Window 窗口的添加过程,这里我们简单看一下,AMS 如何实现 Window 窗口的更新和移除流程。
2023-11-01 18:05:04 225
原创 Android WMS——WindowState介绍(十三)
在窗口管理系统(Window Manager Service,WMS)中,WindowState 是一个核心概念,用于表示应用程序窗口的状态和属性。每个应用程序窗口在 WMS 中都对应一个 WindowState 对象。WindowState 包含了多个属性和方法来描述窗口的行为和状态,其中一些重要的属性和方法包括:Token(令牌):每个 WindowState 都有一个唯一的令牌,用于标识窗口的身份。令牌在 WindowToken 对象中维护,并且用于关联窗口与其所属应用程序的其他组件。
2023-11-01 15:29:41 364
原创 Android WMS——WindowToken介绍(十二)
在 WMS(Window Manager Service)中,WindowToken 是一个重要的类,用于表示窗口的令牌(Token)信息。WindowToken 主要负责管理窗口的一些属性和行为,包括窗口类型、窗口拥有者(Owner)以及处理窗口可见性等。DisplayContent.addWindowToken 和 WindowManagerService.addWindowToken 都是用于添加窗口令牌的方法,但它们的作用范围不同。
2023-10-31 18:56:33 270
原创 Android WMS——DisplayContent介绍(十一)
在 Android 的 WMS(Window Manager Service)中,DisplayContent 类扮演着非常重要的角色。它的主要作用是管理一个物理显示设备(如屏幕)上所有窗口的信息。具体来说,DisplayContent 封装了一个 Display 对象,它代表一个物理显示设备的抽象。DisplayContent 维护了一个窗口列表(WindowList),内部存储了该显示设备上所有窗口的状态信息,并根据窗口的优先级进行堆叠和排序。
2023-10-31 15:37:42 238
原创 Android WMS——WMS窗口添加(十)
Android 的 WMS(Window Manager Service)是一个关键组件,负责管理窗口的创建、显示、布局和交互等。Window 的操作有两大部分,一部分是 WindowManager 来处理,一部分是 WMS 来处理,如下图所示:WindowManager 中,通过 WindowManagerGlobal 创建 ViewRootImpl ,也就是 View 的根。
2023-10-31 14:13:51 298
原创 Android WMS——WMS类基础(九)
1、WMS重要成员源码位置……………………mPolicy类型为 WindowManagerPolicy。窗口管理策略的接口类,用来定义一个窗口策略所要遵循的通用规范,并提供了 WindowManager 所有的特定 UI 行为。他的具体实现类为 PhoneWindowManager,这个实现类在 WMS 创建时被创建。WMP 允许定制窗口层级和特殊窗口类型以及关键字的调度和布局。mSessions数据类型为 ArraySet,元素类型为 Session。
2023-10-30 14:54:49 229
原创 Android WMS——WM窗口管理(八)
我们在 ViewRootImpl 分析中,已经对 WindowManager 的功能有一个大致了解,这里再来详细看一下 WindowManager 是如何管理 Window 的。
2023-10-28 11:46:51 305
原创 Android WMS——操作View(七)
最开始学习 View 的时候最先分析的是它的布局(LinearLayout、FrameLayout、TableLayout、RelativeLayout、AbsoluteLayout),然后是它的三大方法(measure、layout、draw)。源码位置:/frameworks/base/core/java/android/view/View.javaActivity:应用程序组件,提供一个屏幕,用户可以用来交互来完成某项任务。View:作为所有图形的基类。
2023-10-28 11:45:43 173
原创 Android WMS——ViewRootImpl分析(六)
Actiivty 中会创建一个 Window 对象。setContentView 方法中的 View 最终也会被添加到 Window 对象中的 DecorView 中,也就是说一个 Window 中对应着一个 View。这个 View 是被 ViewRootImpl 操作的。WindowManager 就是入口。
2023-10-28 11:45:24 260
原创 Android WMS——Dialog和Toast窗口创建(五)
每一个 Window 都对应着一个 View 和一个 ViewRootImpl。Window 表示一个窗口的概念,也是一个抽象的概念,它并不是实际存在的,它是以 View 的方式存在的。WindowManager 是我们访问 Window 的入口,Window 的具体实现位于 WindowManagerService 中。WindowManager 和 WindowManagerService 交互是一个 IPC 的过程,最终的 IPC 是在 RootViewImpl 中完成的。
2023-10-26 20:27:55 331 2
原创 Android WMS——Activity窗口创建(四)
我们都知道 View 不能单独存在,必须依附在 Window 上面,因此有视图的地方就有 Window。这些视图包括 :Activity,Dialog,Toast,PopupWindow 等等。
2023-10-26 16:29:38 149
原创 Android WMS——Window窗口(三)
第一个子窗口应用窗口的子窗口,PopupWindow的默认类型用来显示Media的窗口TYPE_APPLICATION_PANEL的子窗口OptionMenu、ContextMenu的默认类型TYPE_APPLICATION_MEDIA的重影窗口,显示在TYPE_APPLICATION_MEDIA和应用窗口之间。
2023-10-26 11:17:51 204
原创 Android WMS——系统服务(二)
WMS 作为系统服务,也是在 SystemServer 内部启动的。Android 系统在启动的时候,会启动两个重要的进程,一个是 Zygote 进程,另一个是由 Zygote 进程 fork 出来的 system_server 进程,SystemServer 会启动我们在系统中所需要的一系列 Service。
2023-10-25 17:57:07 292
原创 Android WMS——概述(一)
窗口动画是指在切换窗口、改变窗口大小或位置等场景下,窗口的平滑过渡效果。这些动画能够为用户带来视觉上的流畅感,增加用户的交互乐趣。Android 系统提供了一些内置的窗口动画效果,并支持开发者自定义窗口动画。开发者可以通过使用属性动画系统,来自定义窗口动画效果。通过设置窗口的属性值,如位置、大小、透明度等,并根据自己的需求创建、配置和管理属性动画对象,从而实现各种独特的窗口动画效果。总的来说,Android 的 WMS 通过结合属性动画系统,支持窗口动画效果的展示。
2023-10-25 15:29:10 378 2
原创 Android Radio实战——静音操作(十九)
在之前的文章中,介绍 RadioTuner 时看到了静音功能的接口,当时感觉跟其他接口差不多,就没有做详细分析,但是在后来看代码时发现并没有那么简单。这里我们就再来分析以下 Radio 的静音操作流程。
2023-10-23 18:12:50 487
原创 Android AMS——进程管理(十八)
Android AMS 的进程管理主要涉及以下几个方面:进程创建:当需要启动一个应用程序时,AMS 会负责创建该应用的进程。进程创建是根据应用的包名和启动组件信息进行的。创建进程时,AMS会为其分配一个唯一的进程 ID 和进程运行时环境。进程分配:AMS 根据不同的应用和组件属性,为每个应用分配不同的进程优先级。进程分配的优先级包括前台进程、可见进程、服务进程和后台进程等。
2023-10-18 20:35:15 185
原创 Android AMS——优先级内存回收(十七)
updateOomAdjLocked() 方法用于在 Android 系统中动态调整应用程序的优先级和内存使用权重。在Android系统中,OOM(Out-of-Memory)管理器负责根据系统内存使用情况,决定哪些进程在内存不足时被终止以释放内存。OnTrimMemory 的主要作用就是指导应用程序在不同的情况下进行自身的内存释放,以避免被系统直接杀掉,提高应用程序的用户体验。
2023-10-18 20:16:19 226
原创 Android AMS——全局内存回收(十六)
trimApplications() 方法用于底层系统中的全局内存回收。它会遍历整个应用程序列表,检测不活动的应用程序,并主动关闭这些应用程序,释放它们占用的内存资源。该函数的目的是通过释放不再使用的应用程序所占用的内存空间,从而提高整个系统的性能和稳定性。它可以通过以下几种方式来实现内存回收:关闭不活动的应用程序:当应用程序处于后台运行或者长时间没有与用户交互时,它们被认为是不活动的。trimApplications() 函数可以检测到这些不活动的应用程序,并将它们关闭,释放它们所占用的内存空间。
2023-10-14 14:10:10 121
原创 Android AMS——停止和结束Activity清理(十五)
processStoppingAndFinishingActivities 方法在 Android 系统中负责处理正在停止和结束的Activity。在Android系统中,当一个 Activity 被标记为停止状态(stopped)时,它不再可见,但是系统仍然保留该 Activity 的状态和资源,以便在需要时能够快速恢复。然而,当系统内存紧张需要回收内存时,processStoppingAndFinishingActivities() 函数会被调用,用于处理这些已停止的 Activity。
2023-10-12 20:01:25 165
原创 Android AMS——内存回收机制(十四)
Android AMS 的内存回收机制主要涉及以下几个方面:Low Memory Killer(LMK):这是 Android 系统中的一个重要组件,用于监测系统内存使用情况并根据一定的策略杀死进程以释放内存。LMK 在系统内存不足时,会根据优先级和内存使用情况决定杀死哪些进程,从而释放内存资源。优先级分类:AMS将应用根据其重要性和用户体验分为不同的优先级,如前台进程、可见进程、服务进程和后台进程。根据优先级,AMS在内存不足时会更倾向于杀死优先级较低的进程,以保证前台进程和用户正在交互的进程的运行。
2023-10-12 16:34:21 231
原创 Android AMS——栈管理详解(十三)
首先,Activity 启动,分为两个类型,从 Activity 中的启动,和非 Activity 中的启动。这两种发动,决定了启动流程中的 resultTo 是否存在,即源 Activity 的 ActivityRecord。目标 Activity 的启动栈核算,取决于它的启动形式,即最终的 mFlag,还有源 Activity 的栈。
2023-10-11 20:56:44 210
原创 Android AMS——创建任务栈(十二)
在了解栈的创建之前,我们还要知道 Activity 的启动模式,有过 APP 开发经验的朋友对这个应该多少有些了解。我们再来简单回顾一下。
2023-10-11 13:12:21 270
原创 Android AMS——栈管理基础(十一)
Android AMS(Activity Manager Service)是Android系统中负责管理应用程序生命周期和任务栈的重要服务。通过 AMS,系统可以管理应用程序的启动、切换、销毁和任务栈等操作。其中,Activity 栈管理是AMS的核心功能之一。Android 的 Activity 栈是用来管理应用程序中各个 Activity 实例的,它采用栈的数据结构,遵循后进先出(LIFO)的原则。当一个 Activity 启动时,它会被放入栈顶;当一个 Activity 被销毁时,它会从栈中移除。
2023-10-10 18:03:43 177
原创 Android AMS——Activity暂停流程(十)
在前面的文章中,对于已启动的应用,在启动新的 Activity 时,调用到 resumeTopActivityInnerLocked() 方法会先调用 startPausingLocked 暂停前一个 Activity,再启动新的 Activity。这里我们就看以下 Activity 的暂停流程。
2023-10-08 20:57:59 147
原创 Android AMS——APP启动流程(九)
调用 Activity 的 startActivity 方法来启动目标 Activity。接着就会调用到 Instrunmentation 的 execStartActivity 方法,通过获取 ATMS 的 binder 代理对象,然后调用到 ATMS 的 startActivity 中去。
2023-10-08 16:53:57 249
原创 Android AMS——应用启动Activity(八)
上一篇文章在创建 Application 后还调用了 ActivityTaskManagerInternal 的 attachApplication 方法去启动 Activity,启动 Activity 的流程我们从这里开始分析。
2023-09-27 11:19:01 254
原创 Android AMS——应用创建Application(七)
前面已经分析了进程的创建流程,最后启动了 ActivityThread 类 main 的方法,接下来开始创建该应用对应的 Application。
2023-09-26 17:31:03 263
原创 Android AMS——应用进程孵化过程(六)
上一篇文章最后说了,ZygoteServer 会在系统启动的时候,创建一个 Socket 服务端,用于接收客户端的 fork 请求。ZygoteServer 在初始化结束后,会调用 runSelectLoop() 方法,用于处理客户端的消息。当客户端请求 fork 进程时,runSelectLoop() 方法会转交给 ZygoteConnection 类的 processCommand() 方法去处理。
2023-09-26 13:13:43 216
原创 Android AMS——应用进程创建流程(五)
经过前两篇的内容才梳理完桌面进程启动的准备工作,这一篇才开始 Launcher 进程的真正启动历程。接上一篇,在 ActivityTaskSupervisor 中会判断进程是否存在,如果进程不存在,则会创建进程,执行 startProcessAsync() 方法。如果进程存在,则执行 realStartActivityLocked() 方法。在 Launcher 的启动时,进程是不存在的。所以我们先来分析一下进程不存在的情况。
2023-09-25 17:08:45 388
原创 Android AMS——应用进程创建准备(四)
上一篇文章介绍了 Launcher 的前期准备工作,这里我们继续分析 Launcher 进程的启动启动流程。
2023-09-25 14:35:11 326
原创 Android AMS——Launcher启动前期(三)
上一篇文章介绍了 SystemSever 启动 AMS 的流程。最后,当引导服务、核心服务、其他服务都完成后,会调用AMS中的 systemReady() 方法,告知 AMS 可以执行第三方代码,这篇文章我们接着分析。
2023-09-25 11:23:24 195
原创 Android AMS——AMS初始化(二)
Android AMS 也是一个系统服务,属于系统服务中的引导服务(startBootstrapServices)。这里我们主要看一下 ActivityManagerService 的启动流程。
2023-09-23 16:45:27 306
原创 Android AMS——概述(一)
1、Activity生命周期管理Activity 生命周期是指在 Android 应用中,一个 Activity 从创建到销毁的整个过程。了解 Activity 生命周期非常重要,因为它涉及到应用的状态变化、内存管理以及用户交互等方面。onCreate()当 Activity 第一次创建时,系统会调用onCreate()方法。在这个阶段,可以进行一些初始化工作,例如设置布局、绑定数据等。一般来说,该方法执行完后,Activity 会进入 "Created" 状态。onStart()
2023-09-22 15:33:40 797
原创 Android Radio实战——打开Tuner(十八)
对于 Radio 的初始化在前面的很多功能中,都会到 mRadioTuner 参数,获取 mRadioTuner 的过程其实就是对 tuner 的初始化。
2023-09-19 20:56:07 721 6
原创 Android UT开发简介
JUnit是一个用于编写和运行单元测试的开源框架。它是Java开发中最受欢迎的单元测试框架之一,用于测试Java应用程序的各个组件、方法和功能。简单易用:JUnit提供了一组简洁而直观的API,易于学习和使用。它使用注解和断言来编写测试代码,使得编写和运行单元测试变得简单明了。自动化测试:JUnit支持自动化测试,即可以编写一次测试,然后反复运行以确保代码在整个开发过程中保持正确性。这样可以节省大量手动测试的时间和工作量。测试驱动开发:JUnit鼓励测试驱动开发(TDD)的实践。
2023-09-13 13:55:28 501
原创 Framework基础——Zygote进程介绍(五)
从 AndroidRuntime 到 ZygoteInit,主要分为3大过程:创建虚拟机——startVm():调用JNI虚拟机创建函数;注册 JNI 函数——startReg():前面已经创建虚拟机,这里给这个虚拟机注册一些 JNI 函数(后面 Java 中用到的函数是 native 实现,这里需要提前注册这些函数);
2023-08-22 11:22:41 59
Android控件的简单使用
2015-02-16
Fragment使用
2015-01-20
ContentProvider测试Demo
2015-01-14
添加查询联系人信息
2015-01-14
HCI Log分析工具-CPAS-11
2024-04-17
Android Audio相关流程时序图
2023-11-30
Android Radio相关流程时序图
2023-09-01
本地实现U盘扫描SDK部分代码
2022-10-28
开发调试所使用的各种格式音视频
2022-07-20
Android端Socket实现聊天功能
2021-10-11
SocketDemo.zip
2021-09-24
断点续传下载
2015-05-19
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人