
android
文章平均质量分 82
bruk_spp
长期从事嵌入式软件开发,对android上中下都很了解。
展开
-
android屏幕下电控制
很久之前android刚兴起时候从事battery ,charge驱动顺带着把PMS差不多也看了一遍,最开始看的很多不理解。后来在各家公司经历不同的角色,对PMS这块了解越来越多,也越来越深。特别是前前面搞fingerprint快速亮屏时,修改指纹服务以为PMS逻辑控制,以达到更快的亮屏速。进一步加深了对PMS的理解,目前的我正从事高通平台LCD驱动开发工作,由于遇到一个LCD下电时序的问题,与surfaceflinger和PMS再次打交道,这里就记录下个人对PMS如何对LCD进行正电控制的,这里大体可以分原创 2021-03-06 15:22:57 · 1073 阅读 · 0 评论 -
mediaplayer播放过程及player的选择
还是先来看个序列图:1media.player的加载int main(int argc __unused, char **argv __unused){ signal(SIGPIPE, SIG_IGN); sp<ProcessState> proc(ProcessState::self()); sp<IServiceManager> sm(defaultServiceManager()); ALOGI("ServiceManager: %p"原创 2020-08-31 15:27:09 · 899 阅读 · 0 评论 -
surfaceflinger刷新动作和client合成
首先来看看,createlayer这个是后面刷新的基本。createsurface生成surface的时候会调用createlayerstatus_t SurfaceFlinger::createLayer( const String8& name, const sp<Client>& client, uint32_t w, uint32_t h, PixelFormat format, uint32_t flags, .原创 2020-08-29 22:49:33 · 1470 阅读 · 0 评论 -
surface的创建过程
还是首先来看一个序列图:1.ViewRootImpl.mSurfaceViewRootImpl这个类是是处理视图绘画,input输入,调用wms调用窗口的核心类。其成员变量mSurface在申明的时候就初始化了: final Surface mSurface = new Surface();上面干巴巴的创建了Surface实例,进去看Surface这个类的无参构造函数也是个空的,所以还要继续往下分析2.SurfaceSession的创建在wms窗口管理过程中,视图的添加过程View原创 2020-08-20 18:32:59 · 1806 阅读 · 0 评论 -
surfaceflinger软件刷新事件的处理流程
1.surfaceFlinger.initvoid SurfaceFlinger::init() { ALOGI( "SurfaceFlinger's main thread ready to run. " "Initializing graphics H/W..."); ALOGI("Phase offest NS: %" PRId64 "", vsyncPhaseOffsetNs); { // Autolock scope Mut.原创 2020-08-18 14:47:24 · 877 阅读 · 0 评论 -
hwc2 surfaceflinger启动流程分析
先还是大体的来看下流程图,这个比hwc1复杂了好多,不是太好理解:1.SurfaceFlinger.init "Starting with vr flinger active is not currently supported."); mRealHwc = new HWComposer(false); mHwc = mRealHwc; mHwc->setEventHandler(static_cast<HWComposer::EventHandler原创 2020-08-17 21:00:51 · 2525 阅读 · 0 评论 -
hwc1 surfaceflinger启动流程
先来看看大体的流程图:1.SurfaceFlinger作为一个服务被添加到serviceManager上,其服务的添加在main_surfaceflinger.cpp这个文件里面int main(int, char**) { ... sp<SurfaceFlinger> flinger = new SurfaceFlinger(); setpriority(PRIO_PROCESS, 0, PRIORITY_URGENT_DISPLAY); set_sche原创 2020-08-16 17:13:33 · 954 阅读 · 0 评论 -
activity view显示流程
先来个序列图:1.handleLaunchActivity private void handleLaunchActivity(ActivityClientRecord r, Intent customIntent, String reason) { // If we are getting ready to gc after going to the background, well // we are back active so skip it.原创 2020-08-14 23:06:08 · 419 阅读 · 0 评论 -
activity启动流程分析
先来个大体流程图:我们一般调用startActivity这个API来启动一个新的activity。实际上差不多所有的APP基本是由launcher 调用这个接口拉起来的。所以我们只要从Activity.java这个类跟踪看其实现过程就可以。1.startActivity @Override public void startActivity(Intent intent) { this.startActivity(intent, null); }原创 2020-08-07 18:07:56 · 331 阅读 · 0 评论 -
android framework层input事件接收和派发
input序列图前面是启动activity时,view的添加过程。在view添加过程中会注册inputchannel,而inputchannel是input事件处理的核心通道。在本篇里所有的介绍都是围绕inputchannel的创建和读取展开的,前面的view添加是窗口管理部分不是本篇关注的内容就不介绍了。本篇从inputchannel的创建开始介绍。1.openInputChannel在Windowstate.java文件里面,来看看这个代码实现...原创 2020-07-04 13:46:07 · 1845 阅读 · 1 评论 -
按键事件inputflinger大体流程
前言: 在android2.3版本的时候,详细的对照代码了解了遍按键事件从驱动到framework的流程。并在高仿机上实现新增按键从驱动到系统的功能。随着时间的不断推进,工作的重点越来越向驱动集中,对HAL和系统的了解停留在之前的理解上。近来看一个windowstate的提交,实现发现对按键流程还有不太明白的地方。现在回过头来详细的再对按键梳理一遍,首先来着个大体的序列图:在这里按照序列图的标号,对照着代码大体的理下思路:InputFlinger1.InputManager.cpp这个类是inpu原创 2020-06-25 21:47:20 · 2669 阅读 · 1 评论 -
Cannot find entry in either framework or device manifest
在android里使用hidl技术,代替了以前的dlopen的方式来加载第三方的so.从android8.0开始使用Android Treble框架来加载service.这里从我在实际开发中遇到的问题说起,在VTS测试服务是否存在时,老是报Cannot find entry XXX服务。各种关键接口找不到,也不知道问题出在哪里。所以只好看其源码实现了。1.各种hal文件都继承胃IBase接口,...原创 2019-10-12 00:06:33 · 8493 阅读 · 1 评论