自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(24)
  • 收藏
  • 关注

原创 Android 14 - 绘制体系 - VSync(1)

范围,如果用户通过setFrameRate手动指定一个帧率,其可能超出primaryRanges的范围;,主要面向SurfaceFlinger提供VSync相关接口。Scheduler包含对所有屏幕的VSync的控制。期内维护一个不断请求VSYNC的死循环。、针对SurfaceFlinger合成的。SurfaceFlinger的初始化。也就是VSYNC的终端接收者。计算下一次VSync的地方了。VSYNC-app的请求流程。VSYNC-app的分发过程。VSYNC-sf的请求和分发。

2024-05-27 23:38:54 1238

原创 Android 14 - 绘制体系 - 概览

从Android 12开始,Android的绘制系统有结构性变化, 在绘制的生产消费者模式中,新增BLASTBufferQueue,客户端进程自行进行queue的生产和消费,随后通过Transation提交到SurfaceFlinger,如此可以使得各进程将缓存提交到SufrfaceFlinger后合并到同一事务后同步提交,在同一帧生效。实际上,从Android12到Android14整个绘制系统在各个环节也都有了或大或小的。

2024-05-25 23:25:25 648

原创 Android14 - WindowManagerService之客户端Activity布局

Android14。

2024-04-21 17:43:31 904 2

原创 Android - 深入浅出理解SeLinux

1. 概述1. 概述SeLinux(Security-Enhanced Linux)是一个标签系统(labeling system)。每个进程都有一个label(称为process label),每个文件系统所涵盖的文件/目录、网络端口、设备等对象也有一个lable(称为Object label)。SeLinux通过编写规则来控制一个process label对一个Object label的访问,这个规则称之为策略(Policy)。

2024-03-22 16:58:08 1336 1

原创 Android14 - AMS之Activity启动过程(3)

Android14 - AMS之Activity启动过程(1)-CSDN博客Android14 - AMS之Activity启动过程(2)-CSDN博客上篇中我们梳理完ActivityStarter的startActivityInner,本篇从这里开始:platform/frameworks/base/services/core/java/com/android/server/wm/RootWindowContainer.javaboolean resumeFocusedTasks

2024-03-19 22:27:15 1070

原创 Android14 - AMS之Activity启动过程(2)

Android14 - AMS之Activity启动过程(1)-CSDN博客上篇梳理到:TaskDisplayArea和Task的复用与创建TaskDisplayAreaexecuteRequest后,随后调用startActivityUnchecked,进而调用startActivityInner。platform/frameworks/base/services/core/java/com/android/server/wm/ActivityStarter.java

2024-03-15 11:09:26 1126 1

原创 Android14 - AMS之Activity启动过程(1)

callingPid如果赋值,和realCallingPid一般是相同的,都来自Binder.getCallingPid(),但在使用PendingIntent的场景,callingPid代表创建了PendingIntent的进程,而realCallingPid代表通过使用PendingIntent.send()执行PendingIntent的进程。这里使用了SynchronizedPool--简单的对象池来管理对象的生产,对象池里有3个对象,如果申请时池子里没有可用对象,则直接new一个。

2024-03-14 22:37:48 1303 2

原创 Android14 - Framework- Configuration的创建和更新

这个方法最终会通知到客户端应用的所有Activity、Service等。看ensureVisibilityAndConfig。调用了Display。

2024-03-14 22:27:16 1073 1

原创 Android12 - WMS之WindowContainer树(DisplayArea)

同一个Feature,相邻的Layer所生成的结点相同且共用,比如对于WindowedMagnification这个Feature,0~31 Layer所对应的结点都是[WindowedMagnification, 0, root]将task加入到TaskDisplayArea。如图示表格,按每个Layer所对应的列从上到下,最上面的为根结点root,上面的结点为下面节点的结点点,下面的节点被加入到上面结点的mChildren属性列表中。每个layer的值代表该layer在Z轴中的顺序,值越大的越靠上。

2024-03-11 17:44:54 1004

原创 Android启动过程 - SystemServer

在startBootstrapServices、startCoreServices、startOtherServices、startApexServices中,对各类服务进行了启动,比如我们常见的ActivityManagerService、PackageManagerService、BatteryService等等,共近百个Service。进行启动时间、日志、heapprofd、严苛模式等性能采集相关的基本设置,以及进程优先级、binder、虚拟机内存等保障SystemServer正常运行的基本设置。

2024-01-30 00:54:02 886 1

原创 Android启动过程 - Zygote

我们知道zygote是app进程的孵化器,被孵化的子进程将继承这个客户端的socket,与服务端通信。Arguments里,将之前的参数“com.android.server.SystemServer”解析了出来,放到了startClass属性里,因此findStaticMain的首个参数就是com.android.server.SystemServer。常用基础类的初始化;在上一篇中,我们知道zygote进程是在`/system/etc/init/hw/init.rc`文件中配置,由init进程启动的。

2024-01-26 00:09:50 1061 1

原创 Android启动过程 - init进程对服务子进程的管理

接上文三、服务子进程的管理1. 监控service异常退出对于init启动的service,如果没有指定oneshort(一次性)的option,则默认为常驻service。在此情况下,当servcie意外退出,init将监控到并重启service首先,在中注册SIGCHLD信号的处理函数,用于监听init子进程的终止。SIGCHLD会监听到子进程的终止、暂停、恢复三个状态。init在注册SIGCHLD时,设置了这个flag,其作用是不监听暂停、恢复状态,只关注终止状态。

2024-01-18 01:22:59 498 1

原创 Android启动过程 - init.rc处理过程(二)

接上文二、init进程执行rc文件rc文件处理的大概表述:将init.rc文件解析后,对于的执行,init进程主要通过以下几个角色实现:Epoll():对的封装,用于事件的分发控制):Action事件的队列管理、事件执行。property_service(core/init/property_service.cpp):Property变化事件的管理首先,我们回顾下,kernel在启动init进程后,依次调用core/init/init.cpp中的。

2024-01-12 01:48:38 1060 1

原创 Android启动过程 - init.rc处理过程(一)

当条件被触发,多个符合条件的action将被按声明顺序依次加入一个“执行队列①”中,并按顺序执行。如果在window指定的分钟数(默认为4)内crash超过4次,则重启进入target指定模式(默认为bootloader,即fastboot)。trigger指的是触发该action的条件,而action指的是触发该条件后,要执行的整个代码段。后期即使通过设置,使得property:true=true,该段代码也不会再执行了, 因为boot已经是一个执行过的event。:设置该service的进程优先级。

2024-01-12 01:36:33 1553 1

原创 Android 启动过程 - 从上电到init进程的建立

这里需要注意的是,上述调动过程中,pid是在kernel_thread(kernel_init...)时创建的,do_execve使用新进程覆盖当前进程,pid不变。LoadBootScripts中依次解析多个rc文件,其中,/system/etc/init/hw/init.rc是主文件。在/system/etc/init/hw/init.rc中,启动一系列核心进程和服务,包括重要的zygote进程。/system/etc/init/hw/init.rc被执行后,其他rc文件会被执行。

2024-01-05 23:12:56 994 2

原创 DeviceOwner越权可行性

得知deviceOwner的状态最终体现在Owers-》mDeviceOwner字段。对于log的读取,也没有提权,仍然只能读取自身的log。

2022-08-08 15:11:10 265 1

原创 Android Log系统之读取权限

Logcat通过socket请求logd, logd从其缓存遍历mLogElements,返回对应的log给logcat客户端。最终每条log发送给logd,每条log被组织成一个LogBufferElement对象,存储在其名为mLogElements的缓存中。可见,shell进程的groups中,是拥有AID_LOG这个id的。另一方面,一个普通进程的groups里没有相关id,因此只能查看自己的log。shell进程不满足以上条件,继续:查看/proc/pid/status。...

2022-08-08 15:07:40 1011

原创 如何正确使用Android自定义View

但是上面的实现,会多出一个无用的层级来, 因为layout里最外层的标签是LinearLayout,解析完毕后,会加到CustomView本身的这个Linearlayout上来,其中一个LinearLayout是没有必要的。这里看到如果是自定义view, 及带包名的xx.xx.xx格式的标签名, 会直接调用,createView,否则即为系统view, 会调用onCreateView,实际上调用到PhoneLayout的onCreateView方法,在加上系统包名的前缀后再调回createView方法。..

2022-08-08 14:51:02 756

原创 Google Cloud Messaging(GCM)简介与基本使用

官方文档参考:https://developers.google.com/cloud-messaging/gcmGCM简介Google Cloud Messaging (GCM)是Google提供的服务器与终端进行消息传递的轻量级解决方案,支持客户端与服务器的双向传递,可实现push下发、即时通讯等功能。...

2022-08-08 14:49:32 3809

原创 Android 应用CPU耗电监控分析

Android的API中没有直接提供可查询cpu使用率相关的接口,但是作为android的底层,linux系统中却可以很方便地查询到当前的cpu信息以及实时的cpu使用情况。智能手机电量的消耗是由多种因素造成的,如屏幕的材质、大小、亮度,通信组件的功率,cpu,电池等。软件的耗电主要是由于CPU的工作引起的。因此,如果计算出每个软件某一时段的cpu占用率,即可对各个软件的耗电程度有一个基本的了解。在得到所有主要耗电硬件的功耗、电池的理论上的最高容量、当前电量百分比后,就可以估算出剩余电量的使用时间了。...

2022-08-08 14:43:50 2328

原创 Android AMS分析之Activity启动过程

在Android framework的systemService中有多个以线程形式存在的Service, 如ActivityManagerService、WindowMangerService等等, 其中ActivityManagerService(AMS)是个很重要的Service, 管理着四大组件的生命周期,本文先从Activity的启动过程入手, 了解从App端请求一个Activity, 到AMS进行一系列处理并与之交互的大概流程, 从而对Acitivity的启动过程有一个感性的认识。...

2022-08-08 14:40:40 974

原创 Android中Sqlite的使用性能优化方法总结

项目中业务对DB依赖较强,并且在较大数据量的情况下,对速度要求较高,在开发过程中总结了一些提高db操作效率的方法,在此记录。

2022-08-08 14:29:58 1808

原创 Android Dalvik内存管理细节分析总结

是的, 在前两天的Google IO大会上推出的Android L上,ART已取代dalvik成为首选运行时环境,这似乎表示dalvik的时日已经不多了。但看了一半总不能半途而废,无论如何还是总结下吧。在阅读dalvik代码过程中参考了一些资料,在本文最后列出。这些资料从不同角度对dalvik内存相关做了分析,但有的片面或过于概括,本文主要对整体主要流程作下梳理,并对个人较感兴趣的细节进行探究。能力有限,仅供参考,如果发现错误,还烦请告知,多谢。一.初始化及内存布局我们知道android系统的启动是从app

2022-08-08 14:29:08 692

原创 Android Animation动画原理分析

动画在Android应用中是很常用的,而系统提供的Animation相关动画机制由于简单实用,经常是我们实现动画的首要选择。本文旨在分析Animation相关类实现动画的原理,目的是了解动画实现的主要流程,由于源码较为繁杂,故对一些与主干流程并不相关的代码进行了忽略。本文源代码基于4.0。如果只是想对Animation实现有个简要了解,可忽略前两节,直接从第三节看起。一、view基本层级结构Animation动画实在view的draw()方法里实现的,因此,要想了解Animation的实现原理,不得不对Vi

2022-08-08 14:25:10 1104

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除