Android进阶
文章平均质量分 85
milan-xiao-tiejiang
2015年开始Android App开发,精通Java、Kotlin、c++等Android开发语言,阅读过系统源码及多方Android主流框架,对 vue、flutter等也有一定的认知。
Java方向技术全面,熟练掌握Spring、MySQL等Java Web相关技术,掌握分布式架构体系。
2020年转向c++工程师,重新系统学习c++语法,目前从事清洁服务机器人相关领域。
tip:北京寻求Android、c++职位
展开
-
OpenGL ES 绘制一张图片
注意,上述接口程序中的第一行代码激活的是哪个纹理句柄,在第三行代码中的第二个参数就需要传递对应的 Index,就比如说代码中激活的纹理句柄是 GL_TEXTURE0,对应的第三行代码中的第二个参数 Index 就是 0,如果激活的纹理句柄是 GL_TEXTURE1,那对应的 Index 就是 1,句柄的个数在不同的平台不一样,但是一般都会在 32 个以上。而当缩小的时候,因为没有足够的片段来绘制所有的纹理单元,也会丢失很多细节,是真正的降采样。其中,mColorMatrix 是这个变量在接口程序中的句柄。原创 2023-02-21 18:16:28 · 975 阅读 · 0 评论 -
OpenGL ES SDL库
SDL 可以给开发者提供面向 libSDL 的 API 编程,它的内部能解决多个平台的 OpenGL 上下文环境和窗口管理的问题。开发者只需要交叉编译这个库到各自的平台上,就可以达到一份代码运行到多个平台的目的了。FFmpeg 中的 ffplay 工具就是基于 libSDL 开发的,SDL 不单单可以渲染视频画面,也可以渲染音频。但是对于移动开发者来讲,它也有一些缺点,比如使用 SDL 会牺牲一些更加灵活的控制,甚至某些场景下的功能实现不了。原创 2023-02-21 16:29:55 · 272 阅读 · 0 评论 -
OpenGL ES上下文环境搭建
由于 OpenGL ES 一开始就是为跨平台设计的,所以它本身并不承担窗口管理以及上下文环境构建的职责,这个职责需要由各自的平台来承担。Android 平台使用的是 EGL,EGL 是 Khronos 创建的一个框架,用来给 OpenGL 的输出与设备的屏幕搭建起一个桥梁。原创 2023-02-21 16:22:22 · 1081 阅读 · 0 评论 -
OpenGL 渲染管线与显卡可执行程序
其中,第一个参数 GLuint program 就是传入在上面一步返回的程序容器的句柄,第二个参数 GLuint shader 就是编译的 Shader 的句柄,当然要为每一个 shader 都调用一次这个方法才能把两个 Shader 都关联到 Program 中去。绘制方式的可选值有点、线、三角形三种,分别应用于不同的场景中。通过纹理坐标取得纹理中相对应的片元像素值,根据自己的需要改变这个片元,比如调节饱和度、锐化等,最终输出的是一个四维向量 gl_FragColor,我们用它来表示修改之后的片元像素。原创 2023-02-21 16:00:41 · 525 阅读 · 0 评论 -
OpenGL ES基础简介
视频的渲染源是 YUV 或者 RGBA 格式的数据,这种数据是描述画面最基础的格式,其中 YUV 常用在视频的原始格式中,RGBA 常用在一些图像的原始格式上。目前各个平台最终渲染到屏幕上的都是 RGBA 格式的,因为硬件对屏幕上的设计就是按照每个像素点分为四个子像素来实现的,所以 YUV 和 RGBA 之间是可以互相转换的。原创 2023-02-21 11:48:45 · 608 阅读 · 0 评论 -
Android UI 渲染
先附上一张 Android UI 渲染的整体架构低级别组件BufferQueue 和 gralloc:BufferQueue 将可生成图形数据缓冲区的组件(生产者)连接到接受数据以便进行显示或进一步处理的组件(消费者)。通过供应商专用 HAL 接口实现的 gralloc 内存分配器将用于执行缓冲区分配任务。SurfaceFlinger、Hardware Composer 和虚拟显示屏:SurfaceFlinger 接受来自多个源的数据缓冲区,然后将它们进行合成并发送到显示屏。Hardware Co原创 2021-07-08 16:37:43 · 279 阅读 · 0 评论 -
Linux环境下进程的CPU占用率
Linux 环境下查看 CPU 信息通过 cat /proc/cpuinfo 命令,可以查看 CPU 相关的信息Processor : AArch64 Processor rev 14 (aarch64)processor : 0BogoMIPS : 38.40Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm lrcp原创 2021-07-07 11:12:47 · 1329 阅读 · 2 评论 -
由VirtualAPK了解插件化原理(二)
Android四大组件由于要和AMS频繁通信,AMS在SystemServer进程中,无法直接修改,所以四大组件的插件化是重中之重。Activity插件化首先必须了解Activity启动过程,这里不多介绍启动流程,放一张图可以看下,图是7.0的启动顺序。预先在AndroidManifest.xml中注册Activity来占坑,用来通过AMS的校验。VirtualAPK中占坑的...原创 2020-04-05 17:19:21 · 225 阅读 · 0 评论 -
由VirtualAPK了解插件化原理(一)
上篇了解了热修复原理,热修复技术主要用来修复bug,插件化则主要解决应用越来越庞大以及功能模块的解耦。插件化处理两部分业务,一种是自身的业务模块,一种是接入其他的应用业务。这种方式在淘宝、支付宝、美团、滴滴、360 等航母应用上十分常见。代表方案有阿里的 Atlas、360 的 RePlugin、滴滴的 VirtualAPK 等。插件化的apk分为宿主和插件两部分组成,先被安装到手机中的apk...原创 2020-04-05 13:48:01 · 361 阅读 · 0 评论 -
由Tinker了解热修复原理
资源修复首先必须了解Instant Run 机制Instant Run是Android Studio 2.0以后新增的一个运行机制,在 Android Plugin 2.3 之前,它使用的 Multidex 实现。在 Android Plugin 2.3 之后,它使用 Android 5.0 新增的 Split APK 机制。资源和 Manifest 都放在 Base APK 中, ...原创 2020-04-04 17:04:54 · 434 阅读 · 0 评论 -
Android中对象的序列化的那些事
应用程序中的对象存储在内存中,如果我们想把对象存储下来或者在网络上传输,这个时候就需要用到对象的序列化和反序列化。对象序列化就是把一个 Object 对象所有的信息表示成一个字节序列,这包括 Class 信息、继承关系信息、访问权限、变量类型以及数值信息等。SerializableJava中的序列化Serialable高级详解Android序列化完全解析Serializa...原创 2020-04-01 19:09:38 · 150 阅读 · 0 评论 -
Android 瘦身
参考Awesome-Android-InterviewDemo:Advanced原创 2020-04-08 17:42:46 · 147 阅读 · 0 评论 -
Android UI
参考Awesome-Android-InterviewDemo:Advanced原创 2020-04-08 17:42:36 · 151 阅读 · 0 评论 -
Android电量
参考Awesome-Android-InterviewDemo:Advanced原创 2020-04-08 17:42:27 · 123 阅读 · 0 评论 -
Android网络
参考Awesome-Android-InterviewDemo:Advanced5G整个网络请求主要分为几个步骤DNS 解析。通过 DNS 服务器,拿到对应域名的 IP 地址。创建连接。跟服务器建立连接,这里包括 TCP 三次握手、TLS 密钥协商等工作。发送 / 接收数据。在成功建立连接之后,就可以愉快地跟服务器交互,进行组装数据、发送数据、接收数据、解析数据。...原创 2020-04-08 17:42:19 · 171 阅读 · 0 评论 -
Android存储
参考Awesome-Android-InterviewDemo:AdvancedSharedPreferences由于没有使用跨进程的锁,跨进程不安全。SharedPreferences 文件的加载使用了异步线程,而且加载线程并没有设置线程优先级,如果这个时候主线程读取数据就需要等待文件加载线程的结束。无论是调用 commit() 还是 apply(),即使我们只改动其中...原创 2020-04-08 17:42:10 · 158 阅读 · 0 评论 -
Android启动
参考Awesome-Android-InterviewDemo:AdvancedAndroid App启动顺序预览窗口:根据Theme 属性创建预览窗口。当然如果我们禁用预览窗口或者将预览窗口指定为透明,用户在这段时间依然看到的是桌面。闪屏显示:在进程和闪屏窗口页面创建完毕,并且完成一系列 inflate view、onmeasure、onlayout 等准备工作后,用户看...原创 2020-04-08 17:42:01 · 126 阅读 · 0 评论 -
Android内存
参考Awesome-Android-InterviewDemo:Advanced两个概念RSS- Resident Set Size 实际使用物理内存(包含共享库占用的内存)PSS- Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)系统内存状态,可以直接读取文件 /proc/meminfo。PSS 和 RSS 通过 /proc...原创 2020-04-08 17:41:51 · 188 阅读 · 0 评论 -
Android崩溃
参考Awesome-Android-InterviewDemo:AdvancedAndroid 崩溃分为 Java 崩溃和 Native 崩溃。第三方平台腾讯的Bugly、阿里的啄木鸟平台、网易云捕。JavaJava 崩溃的捕获比较简单。try…catch显式的捕获并处理UncaughtExceptionHandler参考demo中的CrashActivityN...原创 2020-04-08 17:41:36 · 207 阅读 · 0 评论 -
Android卡顿
参考Awesome-Android-InterviewDemo:Advanced线下调试Linux命令说到卡顿,主要都和 CPU 相关。刷了几篇CPU文章,造成卡顿的原因最终都会反映到 CPU 时间上。CPU 时间分为两种:用户时间和系统时间。用户时间就是执行用户态应用程序代码所消耗的时间;系统时间就是执行内核态系统调用所消耗的时间,包括 I/O、锁、中断以及其他系统调用的时间...原创 2020-04-08 17:41:20 · 184 阅读 · 0 评论