自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(61)
  • 资源 (6)
  • 收藏
  • 关注

原创 Android13 针对low memory killer内存调优

在旧版本的安卓系统中,当触发lmk(low memory killer)的时候一般认为就是内存不足导致,但是随着安卓版本的增加lmk的判断标准已经不仅仅是内存剩余大小,io,cpu同样会做评判,从而保证设备性能。这里控制是通过监听kernel里的epoll事件,然后做相关判断进行进程的kill,这里代表了内存失速,由于我们3g内存其实也并不是很宽裕,通过killinfo我们可以看到psi最后一项达到了23.650000证明cpu压力很大,证明系统回收内存压力较大,我们通过修改。内存压力检测的默认机制。

2024-02-20 18:56:01 1351

原创 词法约定 - 现代 C++(心得-贰)

关于词法的约定,其实没有很多心得可以书写,既然作为约定,那么它就是制定的一些规则语义,需要大家共同来遵守,就好像一门语音大家共同的发音和语法。但是还是要简略介绍一下这些约定。同时作为记录以防某一天网站无法访问等。本节介绍 C++ 程序的基本元素。你将使用这些名为“词法元素”或“标记”的元素构造用于构造完整程序的语句、定义和声明等。令牌和字符集注释标识符关键字标点符号数值、布尔值和指针文本字符串和字符文本用户定义的文本有关如何分析 C++ 源文件的详细信息,请参阅转换阶段。

2023-12-11 20:01:23 930

原创 欢迎回到 C++ - 现代 C++(心得-壹)

原文链接这里先是讲了现代c++的优势,其相对于其他编程语言有快速、高效。相对于其他语言,该语言更加灵活,跨平台(硬件平台)性也很强,可以直接访问硬件,虽然现在编程千千万但是访问硬件的语言这点可以干掉几乎90%的编程语言,其应用广泛。但是现在很多硬件的编程还是使用c语言,最近也有慢慢被c++替代的趋势。现代 C++ 代码更加简单、安全、美观,而且速度仍像以往一样快速。接下来从几个方面来大体概括了一下现代C++的优势。

2023-12-04 17:31:37 996

原创 现代C++学习系列心得-序

大学时期学习C++只有两个课时,当时作为c语音的后缀课程学习,老师没有详细带入学习,随着c++的发展与当年的c++也有很大的区别,而且当时对编程的认识并不深刻,对编程中常见的问题更不了解,更不要谈大项目中会出现的一些泄露问题。了解了基本的计算机原理,了解从哪里来再到哪里去,这让我联系到古代文言文的学习,私塾先生先把你的手打肿让你背了一堆文言文,说书读百遍奇迹自现,从现在来看奇迹没有出现,当时吃的苦是真的苦,在懵逼中对大脑进行了固化编程,到现在不接触曾经被逼迫的古诗以及文言文,大脑早已忘得干干净净。

2023-12-04 16:48:30 433

原创 Android13 SystemUI qs快捷设置布局分析

这张图显示了我们快捷设置QSTile布局的包含图,快捷设置是被包含到StatusBar中的,并且是被划分到NotificationShadeWindowView中

2023-05-31 10:58:45 1082

原创 简述Camera2 Capture数据流的流程

我们调用Camera2的api去使用相机的过程大概可以简述如下:1、创建并确定一块SurfaceTexture用来预览数据2、获取CameraManager服务并通过Characteristic去设置相机参数3、使用CameraManager去openCamera并设置CameraDevice.StateCallback回调接口,这个回调接口会返回我们open的cameraDevice,获取到CameraDevice就获得了相机的控制权。

2023-03-17 11:44:32 1022

原创 Android app线程启动记录

当我们使用Intent事件或者app亦或是launcher中去启动app的时候,都要通过AMS去启动app,AMS通过处理一些列的intent参数然后创建ProcessRecord等,最后通过调用Process进程去fork一个子进程,所有的安卓进程都是通过zygote(子宫)来创建的,包括我们的系统进程具体想要了解可以参考另一篇文章。当我们创建app进程的时候fork出来的子进程肯定也是从ActivityThread的main函数开始的,上述图已经很清楚,从main到bindApplication。

2023-03-17 11:43:51 109

原创 Android12 SystemUI记录

之后就如下流程图创建了NotificationPanelViewController,这里主管通知栏的一些显示。StatusBar在start函数中createAndAddWindows(result);然后调用了 makeStatusBarView(result);StatusBar的一些流程。

2023-03-09 16:50:16 167

原创 芯片设计厂商与开源OS(Linux及Android)的兼容及优化

当前主流的开源操作系统当属Linux与Android了,Android同时又基于Linux来实现,芯片厂商再推出兼容这些操作系统的芯片的时候,需要符合开源OS的设计标准,比如谷歌推出Android的treble概念的时候,芯片厂商不得不去遵循这些标准,在软件上去实现HIDL等这些标准,当然谷歌在推出这些标准的时候应该会跟芯片厂商交互。Linux平台对芯片的硬件设计也会产生影响,同时每个芯片厂商也会针对这个硬件进行相应的优化。

2023-03-03 11:42:37 206

原创 Android MediaCodec 编码使用介绍

编码篇:1、获取编解码器信息首先我们需要获取Codec的信息,通过MediaCodecList这个类来实现获取到MediaCodecInfo,代码示例如下:i++) {if (!continue;j++) {这里我们需要设置mimeType,这是一个字符串比如我们需要设置avc格式的视频那么我们可以将其设置为然后选择合适我们的编码器2、设置编码参数设置编码参数通过mediaFormat来实现,代码·示例如下:首先创建MediaFormat实例。

2023-02-24 16:36:56 1462 2

转载 Android开机全解析

执行Bootloader程序过程中,如果镜像验证失败、BootLinux (&Info) 函数启动失败或者接收到启动至 fastboot 的命令(比如使用 adb reboot bootloader进行重启、在启动时按下了电源键+下音量键组合)时,会进入到Fastboot模式(Fastboot 是一种电脑通过USB数据线对手机固件进行刷写、擦除/格式化、调试、传输各种指令的固件通信协议, 俗称线刷模式或快速引导模式)。通过查看某个服务A与下一个服务的日志时间,可以计算出启动服务A的耗时。

2022-12-27 16:10:33 773

原创 Android HIDL 介绍学习之客户端调用

通过编译以后会在out的vendor/bin目录生成本次的bin文件,如果想要开机正常使用需要添加bin文件的selinux权限,本次我们测试通过adb root & adb shell setenforce 0的方式强制关闭seliunx权限检查。hidl的客户端调用相比服务端的实现要简单很多,本次我们通过一个bin程序直接来调用客户端。当我们程序中传入的Type type = static_cast(0);这两个参数时,根据我们上一篇的逻辑判断此时会返回UNKNOW的错误。

2022-11-08 16:45:09 2299

原创 高通Sdm845平台 disable ubwc for video encoder&decoder

adb rootOR:

2022-10-24 09:07:14 1485

转载 视频压缩与编解码的基本原理

JPEG 是Joint Photographic Experts Group(联合图像专家小组)的缩写,是第一个国际图像压缩标准。JPEG图像压缩算法能够在提供良好的压缩性能的同时,具有比较好的重建质量,被广泛应用于图像、视频处理领域。

2022-08-25 14:27:19 1355

原创 展锐平台NewGallery2内存泄露分析

就要往内存泄露的方向去考虑了,一次小的binder传输可能不会有啥问题,但是如果内存泄露积累多了,是不是就会导致 JavaBinder:!,那么就要在binder失败入手,考虑到此问题是长时间运行后必现的问题,那么。通过上面我们的猜想与内存泄露有关加上与binder有关,并且通过查看MediaPlayer的代码可以发现setDataSource的时候确实去跟服务端进行了通讯,这就更一步印证了它的。需要被释放的对象被一些常驻内存的对象持有那么就会出现泄露的情况存在,进而导致我们程序的异常,内存的浪费。...

2022-08-12 19:27:21 1126

转载 debug:am trace-ipc源码分析

如果您有 binder 事务,则可以使用以下adb命令做了什么呢,打开每个进程的binder trace记录开关tracingEnabled。当本进程发起ipc时获取调用栈保存起来TransactionTracker#mTraces。打开systrace开关,此时抓systrace、perfetto会记录slice命令将上述每个进程保存的调用栈写入到文件还有个Binder.ProxyTransactListener值得关注。...

2022-08-12 09:50:30 231

原创 Android 内存分析

Active(file)/ Inactive(file)中的内存是可回收的,当系统内存不足时,系统会将这部分内存释放掉,所以这部分内存不会存在内存泄漏。如果哪个进程有持续的内存泄漏,它占用的内存一定会持续增加,根据这个信息我们就可以找到可疑的进程,再进一步分析。如果Active(anon)+Inactive(anon)所占用的内存增加,说明用户进程占用的内存增加。我们可以观察系统在运行中,哪个函数申请slab的次数会持续增加,如果这个函数申请slab持续增加,就需要检查这个函数对应代码是否存在内存泄漏。..

2022-08-05 20:28:27 2453

原创 Android虚拟内存问题调试记录

重启设备,执行以上指令。复现下问题,每三分钟分钟执行一次指令。当开机时导航应用默认后台已经开启,此时对虚拟内存的占用已经达到。查看对应进程内存使用情况包含各模块占用信息。查看对应进程内存使用情况包含虚拟内存总量。...

2022-08-05 20:20:31 540

原创 安卓Native Memory Leak(本地服务内存泄露)分析

当我们分析app的内存泄露时,使用Android Studio自带的profile工具可以比较方便,但是当我们需要调试一些c/c++本地服务进程的时候就不是很方便了。这里跟的是需要调试的进程名,如果我们需要调试[email protected]这里就是。这种方法就是malloc_debug,这是安卓自带的调试工具,基于libc来实现,通过截取我们的调用堆栈来监控内存使用情况。其中的参数选项可根据自己的需求来添加,具体参数解释可阅读readme。...

2022-08-05 19:29:55 1063

原创 从Systrace看抖音Android Camera Bufferqueue渲染

可以看到Choreographer的工作非常简单,UIThread未做draw等操作,就是简单的做了一个动画,而且每一帧都很均匀,也符合vsync信号,所以我们不能仅仅依据UI线程里的Frame表现就来推断一个应用是否卡顿。网上大部分Systrace性能分析讲解BufferQueue都是从app走Choreographer的角度来分析,但是最近开始分析一个抖音直播卡顿的问题发现走的流程有所差别,在此记录一下。.........

2022-07-26 19:28:05 911

原创 C++语法补充

如果一个成员函数后面跟了一个override关键字,说明这个函数将重写这个函数但是后面加override算是一种声明,此函数要重写同名函数,所以如果将函数的名字写错了比如写成f00则会报错,而下面的两个却不会,这样也可以提醒代码阅读者这是一个重写的函数。..................

2022-05-26 15:25:26 872

原创 Android源码阅读记录

记录阅读源码过程中的一些个人理解

2022-05-03 00:53:22 1396 1

原创 安卓开发常用网站记录

常用网站

2022-03-07 18:40:49 208

原创 CameraBase基类和Camera类介绍

CameraBase基类介绍这个类的定义如下:template <typename TCam, typename TCamTraits = CameraTraits<TCam> >class CameraBase : public IBinder::DeathRecipient{public: typedef typename TCamTraits::TCamListener TCamListener; typedef typen...

2022-03-07 11:38:35 2799

原创 Camera特性萃取器CameraTraits介绍

ameraTraits这个结构体用来管理Camera的特性,定义如下:Z:\SA800U_Android9.0_R01_r220\frameworks\av\include\camera\CameraBase.htemplate <>struct CameraTraits<Camera>{ typedef CameraListener TCamListener; typedef ::android::...

2022-03-07 11:36:27 2088

原创 Camera Native Framework C++语法基础之类成员函数指针

函数指针不能直接调用类的成员函数,需采取间接的方法,原因是成员函数指针与一般函数指针有根本的不同,成员函数指针除包含地址信息外,同时携带其所属对象信息成员指针解引用操作符(.*)从对象或引用获取成员*成员指针箭头操作符(->*)通过对象的指针获取成员类成员函数指针定义因为函数是一个类的成员,所以它的指针定义有别于全局函数,格式如下:typedef 返回值(类名::*函数指针类型名称)(参数列表);需要注意的地方1) 使用typedef创建一个用户自定义类型,

2022-03-07 11:35:28 103

原创 Camera Native Framework C++语法基础之模板的泛化与特化和偏特化

模板的泛化与特化和偏特化模板的泛化是指用的时候指定类型。例如:template <class key>struct hash{};也是我们最常使用的类型。c++模板特化偏特化模板为什么要特化,因为编译器认为,对于特定的类型,如果你对某一功能有更好地实现,那么就该听你的。模板分为类模板与函数模板,特化分为全特化与偏特化。全特化就是限定死模板实现的具体类型,偏特化就是模板如果有多个类型,那么就只限定为其中的一部分,其实特化细分为范围上的偏特化与个.

2022-03-07 11:34:35 2261

原创 SurfaceFlinger记录

在systemserver启动之前我们的SurfaceFlinger通过init已经提前起来,这时候显示相关的硬件初始化已经提前开始。SurfaceFlinger的main函数是在frameworks\native\services\surfaceflinger\main_surfaceflinger.cpp文件中定义的,还是老一套的native server启动流程,创建ProcessState,然后创建sp<SurfaceFlinger> flinger = surfacefling..

2022-01-24 19:07:40 2165

原创 Android Fence timeout

Android fence是一个用来同步的东西

2022-01-22 11:22:20 2249

原创 关于数学的思考

午休时间脑中突然回想起曾经小学到大学所学过的数学,包括学前所学的知识,以及对数字最开始的感知和认识,当我们是个婴儿的时候对数字肯定是没有概念的,但是在我们成长的过程中通过自己的各种感觉器官眼睛皮肤神经等开始接触周边的事务,我们开始认识这个世界,开始对这个大千世界产生好奇,最直接的是眼睛,开始看到各种物体都有边界,都有颜色的区别,相同的物体有同样的颜色形状,当生下来以后第一个学会的能力就是吃东西,小孩子不管拿到什么东西都会往嘴里塞,因为可以通过味觉来区分哪些东西是可口的,可以为自己提供能量成长,如果好吃的东西

2022-01-14 20:08:39 124

原创 Android 10 WindowManagerService addWindow分析

1、检查权限mPolice.checkAddPermission(attrs,appOP);//PhoneWindowManager2、获取或者创建DisplayContent,Activity启动的过程中会创建,但是如果等不及这里先创建。后期WMS所有的appToken由其统一管理,旧版本mTokenMap存在这个类中。3、mRoot RootWindowContainer,在构造函数中实例化,继承自WindowContainer,开机就被实例化,作为设备的根窗口容器。DisplayContent

2022-01-13 09:07:41 408

原创 Android PooledLambda记录

首先需要弄清楚Pool,这个接口的定义位于frameworks/base/core/java/android/util/Pools.java是一个工具类,内容如下:public static interface Pool<T> { /** * @return An instance from the pool if such, null otherwise. */ @UnsupportedAppUsage public T acquire(

2021-12-27 19:55:46 2345

原创 Android 的 fdsan 文件描述符相关介绍

fdsan is a file descriptor sanitizer added to Android in API level 29.Android 的 fdsan(file descriptor sanitizer) 文件描述符排错程序有助于捕获包含 use-after-close 和 double-close 等文件描述符的常见错误。错误示例如下:pid: 32315, tid: 32315, name: crasher64 >>> crasher6...

2021-09-28 10:08:57 2874

原创 Android10 Launcher3的一些总结

由于最近解决Launcher3所有应用界面,一个区域图标闪烁的问题,故将Launcher3这部分代码梳理了一编,做个总结归纳一下。 Launcher3的主入口是Launcher.java这个Activity文件,并且他的布局文件的入口在luancher.xml,从这个入口开始延申很多东西出来,如果深入研究,你会发现这套代码非常庞大,并且运用了很多设计模式在里面,并且后续为了完善又出了quickstep这种版本。 本次需要研究的范围主要为AllApps这个模块,这也是我们上拉之后...

2021-05-21 11:40:43 1309 1

原创 Android HIDL 介绍学习和实战应用

什么是HIDL?官方回答:HAL 接口定义语言(简称 HIDL,发音为“hide-l”)是用于指定 HAL 和其用户之间的接口的一种接口描述语言 (IDL)。HIDL 允许指定类型和方法调用(会汇集到接口和软件包中)。从更广泛的意义上来说,HIDL 是用于在可以独立编译的代码库之间进行通信的系统。HIDL 旨在用于进程间通信 (IPC)。进程之间的通信采用Binder机制。对于必须与进程相关联的代码库,还可以使用直通模式(在 Java 中不受支持)。HIDL 可指定数据结构和方法签名,这..

2020-12-10 15:15:41 6637 20

原创 Android将系统属性作为 API 实现

在Android10源码分析的过程中发现了一种后缀名为sysprop的文件,充满疑惑,故记录本文来探索这种系统属性作为API的实现方法,当然这种文件的编译还是依赖于build目录下的编译脚本,安卓10好像使用go语言来构建这种编译方式,安卓真是成为了各种语言的杂合体,看来以后又要对go语言进行一定的学习了。接下里开始正文分析。先摘抄一大段安卓官方的解释系统属性是在系统范围内共享信息(通常是配置)的一种便捷方式。每个分区都可以在内部使用自己的系统属性。跨分区访问属性(例如,/vendor访问...

2020-12-08 21:18:07 635

原创 Android 10 SurfaceFlinger

Andorid 10 SurfaceFlinger ​​​​​​​模块介绍 SurfaceFlinger 接受来自多个源的数据缓冲区,然后将它们进行合成并发送到显示屏。WindowManager 为 SurfaceFlinger 提供缓冲区和窗口元数据,而 SurfaceFlinger 可使用这些信息将 Surf...

2020-12-07 17:31:59 1461

原创 关于程序的一些思考

提到程序,一个程序员可能会想到的是c,c++,java等一些程序语言,但是对一个普通人来说可能就是控制电脑的,作为一个程序员,回到一个普通人角度,其实程序就是来控制电脑或者一些电子产品,来驱动芯片和一些外围设备以及数据处理,程序的本质就是向cpu下达指令然后由cpu去驱动控制数据以及外围设备。最终程序还是对数据的处理,即使对外围设备的控制也是对数据的处理,外围设备收到数据指令来执行命令。既然程序用来处理数据,那么数据是如何被处理的,这才是如何编程的关键,抛开语言的限制,我们发现每个语言对数据的处理都有自

2020-09-08 09:58:53 187

原创 Android native and Java 互调记录

安卓framework使用java和c++(或者c)语言共同开发,为了使java和c无缝切换,安卓定义了一套native机制(源于java语言的native机制)。 在此已InputMangerServie服务为例,记录一下两种语言无缝切换的方式,方便于以后开发。当安卓linux内核启动以后会读取init.rc等rc文件去加载一些进程,这些进程包含安卓的adbd,bootanimation,zygote等,但是在启动zygote时会首先启动runtime,runtime作为zygo...

2020-08-17 21:00:01 202

原创 Android9鼠标双屏控制实现

首先上一张思维导图来简单梳理一下鼠标事件的上报,以及native层和java层的关联,以及InputManagerService和WindowManagerService的关联以及互调。其实最初的关联是在SystemServer启动的时候实现,在实例化wm的时候将IMS传入如下代码:wm = WindowManagerService.main(context, inputManager,mFactoryTestMode != FactoryTest.FACTORY_TEST_LOW_LEVEL..

2020-08-11 20:32:21 2098 15

openjdk7 for ubuntu64bit

open jdk7 for ubuntu 64bit

2022-04-14

eacwmp相关源码包

easycwmp相关安装源码包

2017-03-14

新浪sae云端服务器用php代码

简单的在新浪SAE应用的php代码,用于移动端简单服务器实用。移动应用开发

2015-07-30

stm32串口控制lcd

通过串口控制lcd的内容,支持stm32 中等flash容量的芯片

2014-09-08

单片机串口调数码管秒表

用protues实现单片机仿真。用虚拟终端和电脑键盘,实现对7段数码管秒表的调试。

2014-04-03

Linux系统的安装操作及常用命令实验报告

基于Linux的Ubuntu下如何安装和使用,基本操作以及常用命令。

2013-10-13

空空如也

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

TA关注的人

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