- 博客(91)
- 资源 (5)
- 收藏
- 关注
原创 从UI绘制了解View,Activity,WMS,SurfaceFilnger之间的关系和作用
1,在Android中所有的界面都是由无数的View组成。2,Android官方定义,最顶层的View是DecorView,该DecorView对象是所有应用窗口(Activity界面)的根View。3,DecorView是PhoneWindow的内部类,FrameLayout的子类,是对FrameLayout进行功能的修饰(所以叫DecorView),是所有应用窗口的根View。
2024-04-07 17:58:15
870
原创 Android系统启动与AMS、PMS之间的关系
启动其他服务,如SystemUI,Launcher等。8.所有标签解析完毕后DOM解析完成,所有的信息全部缓存在内存中,放在一个mPackage的列表中,他是一个ArrayMap,key是包名,value是解析的内容。5,PMS将所有应用存储到缓存中,AMS直接查询PMS缓存获取解析信息启动,AMS和PMS相互配合,这样每个App都可以快速启动,而不是从头加载启动。3,接着是init进程启动,init主要做两件事情,第一个是启动系统关键服务,第二个是守护关键服务,需要启动的服务会保存在init.rc文件。
2024-04-02 16:24:52
460
原创 Binder 原理概述
这样用户A要把苹果送给用户B,用户把苹果交给快递员,发生一次拷贝,快递员找到用户B发现他有快递柜,就把苹果放进快递柜,因为快递柜属于快递公司,所以不需要发生拷贝,用户B因为与快递柜签有协议,所以直接从快递柜中获取,也不需要发生拷贝。2,进程的本质是什么?就好像用户A要给用户B送苹果,用户A先把苹果送给快递员,就是从用户空间拷贝到内核空间,发生一次拷贝,再由快递员把苹果送给用户B,从内核空间拷贝到用户空间,发生一次拷贝,总共发生两次拷贝。3,MMU内有页表,key value,一个虚拟地址对应一个物理地址。
2024-03-30 20:22:16
287
原创 Handler消息详解
在android开发中,通常会在子线程中进行一些操作,当操作完毕后会通过handler发送一些数据给主线程,通知主线程做相应的操作。子线程通过handler向主线程发消息的模式,其实就构成了 生产者-消费者模型。生产者-消费者模型:生产者和消费者在同一时间段内共用同一个存储空间,生产者往存储空间中添加数据,消费者从存储空间中取走数据。
2024-03-02 11:02:58
453
1
原创 WebRTC使用流程文述
WebRtc使用时需要先搭建两个服务器一个是信令服务器,一个是ICE服务器,搭建方法请见此博客1,每个客户端到服务器的链路路径称之为SDP2,WebRTC拿到每个客户端的SDP后,通过webRtc的算法算出每个客户端之间的最短路径,从而让他自己实现p2p打洞连接3,首先要搭建服务器端,一个是信令服务器,也就是房间服务器,用于SDP交换;一个是ICE服务器,也就是打洞服务器,交换内网最近的路由。
2023-04-04 20:38:43
796
原创 FFmpeg使用流程文述
1,去官网上下载代码,交叉编译成so文件和头文件配置进项目2,每个视频容器都会有音频视频两个轨道,需要FFmpeg分别拿到音频索引和视频索引3,读取视频需要在子线程中进行,采用生产消费的模式,并需要队列4,当我们的生产者读取到视频数据包的时候,什么都不管,将它放置在消费者的队列中5,消费者也叫视频解码线程,要用一个死循环,也就是解码器,不断的去解码AVPacket,解码成原始画面6,我们假设这个解码后的数据叫做AVFrame。
2023-04-03 03:43:30
723
原创 opengl使用流程文述
opengl中是通过三个点确定一个面进行着色,总体思路为确定顶点着色器形成矢量图形进行栅格化==》最后再通过片元着色器进行上色的过程1,先用一个view继承自也就是2, 在构造方法中用;选用2版本,2版本稳定一些3, opengl的渲染方式,手动和自动两种,自动的话直接在构造方法中调用;4, 接着初始化CameraX(此处省略)5,回调接口onUpdate,渲染在哪里6,我们要通过实现Preview的接口,从onUpdate的参数中拿到CameraX的预览图像,我们从output中通过方法拿到。
2023-03-31 14:49:02
620
原创 X264使用流程文述
3,3个参数,第一个是x264参数指针,第二个是编码速度,因为是直播,所以采用最快。编码规格,有一个表格上详细标出什么规格下有什么样的码率,帧率要求。8,设置帧率相关参数,帧率是个有理数,使用分数形式表示,6,接着设置码率模式相关参数,有恒定质量,恒定码率,,第三个是编码场景设置,直播一般选用最低延迟的。2,设置默认的编码器参数,调用。4,接着设置编码器的编码规则,编码器的编码图像的数据格式,格式的图像数据, 先将。格式的视频数据的过程。的方式,之后对齐进行赋值。的支持的宽高设置给先。
2023-03-29 10:58:39
410
原创 Native库的交叉编译
在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码,我们就称这种编译器支持交叉编译。这个编译过程就叫交叉编译。简单地说,就是在一个平台上生成另一个平台上的可执行代码。同一个体系结构可以运行不同的操作系统;同样,同一个操作系统也可以在不同的体系结构上运行。举例来说: 我们常说的x86 Linux平台实际上是Intel x86体系结构和Linux for x86操作系统的统称;
2023-03-29 04:48:22
557
原创 RTMP使用流程文述
在现在网络流媒体的协议中,最常见的就为RTMP,在一搬的工程或项目想要实现rtmp,需要借助rtmpdump来实现,我们可以去rtmpdump官网去下载资源包,去集成在我们的项目中,用以实现rtmp。在android的音视频项目中,我们在获取到视频数据后,需要利用rtmpdump主要做两件事,1是建立连接,2是发送数据。(ex:在安卓中如果解码速度和发送数据包速度差异过大,可以采用数据队列存储的方式,例如LinkedBlockingQueue)
2023-03-28 19:18:53
980
原创 JNI原理及常用方法概述
JNIEnv概念 :JNIEnv是一个线程相关的结构体, 该结构体代表了 Java 在本线程的运行环境。通过JNIEnv可以调用到一系列JNI系统函数。JNIEnv线程相关性:每个线程中都有一个 JNIEnv 指针。JNIEnv只在其所在线程有效, 它不能在线程之间进行传递。注意:在C++创建的子线程中获取JNIEnv,要通过调用JavaVM的AttachCurrentThread函数获得。
2023-03-25 18:20:51
2770
原创 音视频硬编解码流程文述
首先通过的得到我们录屏的Intent,用的方法就可以进行录屏。如果说我们想得到录屏生成的H264文件的话,在开始录屏后我们在开始录屏后在中就可以从的方法可以得到对象。然后我们就可以通过的方法传入avc参数得到一个format,再通过format的setInteger方法去设置编码格式,通常会设置四个参数帧率,关键帧频率,比特率/码率,颜色格式得到一个编码格式的format。接着我们通过MediaCodec的的方法往里传入avc参数来得到一个mediacodec。然后我们用这个mediaCodec的。
2023-03-24 17:15:15
439
原创 Android 稳定性面试一文通
稳定性面试一文通一、ANRActivity或Input事件5秒无响应,Broadcast 10s,Service 20s,content provider 10s都会触发;生成log在主log中搜索 ANR 会有明显的打印;同时会生成 data/anr/trace.txt文件;在trace文件中可以看到线程名,优先级,线程ID,线程状态以及ANR的原因。解决方法将所有的耗时操作不要放在主线程,比如网络通信,socket通信,SQI操作,文件读写或者有可能的阻塞放在子线程中执行。二、crash
2022-02-08 17:11:00
2168
原创 Android telephony RILD流程整理
RILD流程RIL的入口\hardware\ril\rild\rild.cint main(int argc, char **argv) {......//设置服务名if (strncmp(clientId, "0", MAX_CLIENT_ID_LENGTH)) { snprintf(ril_service_name, sizeof(ril_service_name), "%s%s", ril_service_name_base, clientId);}
2021-11-25 17:47:54
1910
原创 LVGL开发指导手册
LVGL开发指导手册一,简介介绍LVGL(轻度综合图形界面库)作为一个免费开源图形库能够提供几乎所有的嵌入式GUI。该开源库有使用方便,画面美观,内存占用低等优点。1,收集资料 2,窗口初始化 3,控件 创建 布局 4,回调 5,切屏幕二,资料路径1,ESP32-S2-HMI-DevKit-1 使用说明:https://github.com/espressif/esp-dev-kits/tree/master/esp32-s2-hmi-devkit-12,LVGL官方文档:https://
2021-06-30 11:24:39
4254
转载 Android自定义气泡
Android自定义气泡效果功能详细链接效果功能支持4个方向设置三角形的位置设置阴影颜色,大小设置圆角自定义背景颜色详细链接Android自定义气泡 使用指南
2020-11-10 11:51:18
606
原创 如何实现SettingsObserver extends ContentObserver 来监听Settings设值变化
如何实现SettingsObserver extends ContentObserver 来监听Settings设值变化关于如何在Settings中添加自己的值在之前如何在setting里面添加自己的值中说过,现在来说如何监听监听Settings设值变化。首先可以新建一个内部类SettingsObserver来继承自ContentObserver private final class SettingsObserver extends ContentObserver { private
2020-07-30 11:58:13
1124
原创 Android性能优化(八)电量优化
一、耗电量手机各个硬件模块的耗电量是不一样的,有些模块非常耗电比如移动蜂窝网络、GPS,而有些模块则相对显得耗电量小很多。电量测试,就是测试移动设备电量消耗快慢的一种测试方法。一般用平均电流来衡量电量消耗速度。平均电流越小,说明设备使用时间越长。但是平均电流多大才说明不耗电却没有一个统一标准。硬件测试:利用硬件设备测试被测设备的电流,统计一段时间内(使用某个功...
2020-03-05 16:46:33
675
1
原创 Android性能优化(七)Bitmap内存压缩
一、Bitmap内存占用内存大小计算ARGB_8888ARGB各占8位,即WIDTH*HEIGHT*4RGB_565R5位,G6位,B5位,即16位WIDTH*HEIGH*2getByteCount返回可用于存储此位图像素的最小字节数。BitmapFactory.Options控制解码图片参数inDensi...
2020-03-03 22:48:13
628
原创 Android性能优化(六)图片压缩
一、压缩图片文件压缩——内存压缩二、文件压缩方式1.质量压缩2.尺寸压缩3.格式选择:JPEG/WEBP(4.0以上)三、压缩原理/frameworks/base/core/jni/android/graphics/Bitmap.cppSkia引擎https://skia.org/index_zhGoogle研发、开源的C++二维图形库An...
2020-03-03 16:10:57
506
原创 Android性能优化(五)进程保活
一、进程的优先级Android系统将尽量长时间地保持应用进程,但为了新建进程或运行更重要的进程,需要清除旧进程来回收内存。 为了确定保留或终止哪些进程,系统会对进程进行分类。 需要时,系统会首先消除重要性最低的进程,然后是清除重要性稍低一级的进程,依此类推,以回收系统资源。https://developer.android.google.cn/guide/components/proce...
2020-03-02 23:28:51
688
原创 Android性能优化(四)内存抖动、OOM
内存抖动、OOM内存抖动内存抖动是指内存频繁地分配和回收,而频繁的gc会导致卡顿,严重时和内存泄漏一样会导致OOM。内存抖动为什么会造成OOM这关系到Java的垃圾回收。垃圾回收在对对象进行回收前需要对垃圾进行采集,不同的虚拟机实现可能使用不同的垃圾收集算法,不同的收集算法的实现也不尽相同。不同的算法各有各的优劣势。常用的收集算法有...
2020-03-02 20:28:17
531
原创 Android性能优化(三)内存管理
内存管理内存模型Android原生开发以java为主。在java中,Java内存模型,往往是指Java程序在运行时内存的模型,而Java代码是运行在Java虚拟机之上的,所以Java内存模型,也就是指Java虚拟机的运行时内存模型。java中内存全权交给虚拟机去管理,那虚拟机的运行时内存是如何构成的?很多时候,我们提到内存,会说到堆...
2020-03-01 15:56:12
360
原创 Android性能优化(二)布局渲染流程优化
布局渲染流程优化一、CPU与GPU绘制原理CPU 的任务繁多,做逻辑计算外,还要做内存管理、显示操作,因此 在实际运算的时候性能会大打折扣,在没有 GPU 的时代,不能显示复 杂的图形,其运算速度远跟不上今天复杂三维游戏的要求。即使 CPU 的工作频率超过 2GHz 或更高,对它绘制图形提高也不大。这时 GPU 的设计就出来了。CPU 的控制器较为复杂,而 ALU 数量较少。因此 CPU 擅...
2020-02-26 18:56:18
341
原创 Android性能优化(一)App启动时间优化
App启动时间优化一、首先我们需要清楚App的主题加载你的App的主题位于res/values/styles<style name = "AppTheme" parent = "Theme.AppCompat.Light">我们点击Light主题进去,会发现此主题位于app/build/intermediates/exploded-oar/com.android.s...
2020-02-25 19:00:53
2936
原创 Android Q 上的Biometric生物识别之Face人脸识别流程
第一部分,人脸识别身份验证HIDL借助人脸识别身份验证功能,用户只需要将自己的面孔对准设备即可将其解锁。Android 10 增加了对一种新的人脸识别身份验证堆栈的支持,这种堆栈可安全处理摄像头帧,从而在支持的硬件上进行人脸识别身份验证时保障安全和隐私。Android 10 还提供了一种简单的安全合规实现方法,以支持通过应用集成来完成交易(例如网上银行或其他服务)。Android 人脸识别身份...
2020-02-17 19:11:04
10928
13
原创 Android Q 上的Biometric生物识别之Fingerprint指纹识别流程
第一部分、Fingerprint HIDL在配有指纹传感器的设备上,用户可以注册一个或多个指纹,并使用这些指纹来解锁设备以及执行其他任务。Android 会利用 Fingerprint HIDL(硬件接口定义语言)连接到供应商专用库和指纹硬件(例如指纹传感器)。要实现Fingerprint HIDL,你必须在某个供应商专用库中实现 IBiometricsFingerprint.hal指纹匹配...
2020-02-14 18:35:04
7188
1
原创 Android Q 上的Biometric生物识别
生物识别架构Android Q版本不再使用相对独立的指纹识别或是人脸识别板块,而是转而使用一个相对大的笼统的架构。就是生物识别 Biometric,基于生物特征的因素允许在平台上进行安全身份验证,目前在Android Framework主要包括人脸和指纹生物身份验证两大部分。如果你明白其中的原理,自己也可以做一些别的生物验证的方式,比如声音识别什么的。一、 第一个类BiometricMana...
2020-02-11 18:21:27
4218
2
原创 在Android Q中对AMS的改动
1.有39个档案从am目录删除,大多移动到wm目录下,主要死activityTask,activityRecord.2.am目录增加10个档案,主要是broadcast,oomadj相关档案。3.AMS分裂
2020-02-01 23:18:08
2849
原创 更改Android 默认键盘映射值
更改Android InputManagerService默认键盘映射值在通常情况下我们使用android手机或者平板连接外接键盘,默认的外接键盘映射值都是美式键盘,或者说是标准键盘,然而全世界并非只是用这一种键盘,在意大利,日本等国还拥有自己独特的键盘,因此就需要设置他们自己的键盘映射值frameworks/base/packages/InputDevices/res/raw/keyboa...
2019-11-19 17:22:51
1673
原创 长按Home键唤起Google Search
长按Home键唤起Google Searchandroid默认处理长按Home键会唤起最近使用应用列表,而部分厂商在安装了GMS后,Google会要求修改长按Home键唤起Google Search一,具有实体按键的厂商可以更改配置文件Frameworks/base/core/res/res/values/Config.xml<integer name="config_long...
2019-10-29 15:02:21
1662
原创 Android屏幕录制时怎样在录屏中去掉悬浮窗
Android支持多个屏幕:主显,外显,和虚显,虚显就是我们要说的VirtualDisplay。VirtualDisplay的使用场景很多,比如录屏,WFD显示等。其作用就是抓取屏幕上显示的内容。VirtualDisplay抓取屏幕内容,其实现方式有很多。在API中就提供了ImageReader进行读取VirtualDisplay里的内容。而录屏是通过加载SurfaceFlinger画布,通过加...
2019-09-27 15:15:14
10998
5
原创 在Android P版本中加入Face Unlock相关功能的讲解
在Android P版本中加入Face Unlock相关功能的讲解随着时代的发展,指纹已经不能满足当前人们的需要,特别是在iphone X推出以后,各大手机厂商争相模仿,都会在手机中加入人脸解锁功能,我们今天就拿出一例讲解一下,如何在Android手机中加入face Unlock功能一 . Face Unlock主要流程概括首先,按照用户的使用角度,先进入Settings中录入人脸,此...
2019-09-24 17:28:54
3217
3
原创 切换多用户使用Camera.open报错cannot connect from device user 0, currently allowed device users: 10
最近在做faceunlock与多用户交互的一些东西,我的录入入口是写在Settings中的,Settings是会随着用户的切换更换进程的持有者就像其他普通用户一样,但我的比对是写在SystemUI的keyguard中的,SystemUI去请求Camera.open的时候就会报错CameraService: CameraService::connect X (PID 1334) rejected ...
2019-09-11 15:58:46
2263
原创 Android P 怎样屏蔽HOME键和RECENT键
在android P 版本上想要屏蔽某一个应用界面的HOME键和RCENT键需要怎么做(1)其实也不用多复杂,应用首先在清单文件中获得STATUS_BAR权限<uses-permission android:name="android.permission.STATUS_BAR" />(2)然后我们需要在该Activity的oncreat方法中去屏蔽,记住,一定要在setCon...
2019-09-11 15:38:56
2394
2
原创 Android 9.0怎样在data下创建多用户共享目录
前言Google 在android M 版本后, 通过SELinux 的neverallow 语法强制性限制了普通进程访问data 目录的权限. 严禁除init system_server installd system_app 之外的其他进程直接操作/data 目录比如在data 目录下面创建文件,写文件,重命名文件等等.有很多客户都会在data 目录下创建文件, 保存资讯, 在M 版本上这...
2019-09-11 14:20:00
3486
转载 Android性能优化---TraceView 分析图怎么看
TraceView是什么,TraceView 是 Android 平台特有的数据采集和分析工具,主要用做热点分析,找出最需要优化的点。TraceView 从代码层面分析性能问题,针对每个方法来分析,比如当我们发现我们的应用出现卡顿的时候,我们可以来分析出现卡顿时在方法的调用上有没有很耗时的操作,通过TraceView,可以得到两种数据单次执行最耗时的方法执行次数最多的方法要打开上面的面板,...
2019-07-24 10:20:03
629
原创 Android 9.0 的 recent 键/事件的拦截
在5.0之前的版本中,我们可以在phoneWindowManager里监听key_code_F12键来获取recent键的点击事件,但在如今版本中已经不能这样做了,recent键被单独拿了出来,我们可以在/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java中的onRecentsClick(...
2019-07-12 17:36:18
3635
转载 每个国家对应的values语言Locale和国家代码对照表
每个国家对应的values语言Locale和国家代码对照表 每个国家对应的语言Locale和国家代码对照表 DNN3支持多语言,希望下面的语言代码与对应国家能对你有所帮助语言代码国家/ 地区"" (空字符串)无变化的文化af公用荷兰语af-ZA公用荷兰语 - 南非sq阿尔巴尼亚sq-AL阿...
2019-06-28 11:22:54
4471
转载 git出错"no matching key exchange method found"
问题描述今天升级Ubuntu系统到16.04之后,之前通过git管理的一个项目add和commit之后无法push到服务器。每次提交都报以下错误:Unable to negotiate with xx.xx.x.xxx port xxxx: no matching key exchange method found. Their offer: diffie-hellman-group1-sha...
2019-06-21 14:18:54
1546
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人