![](https://img-blog.csdnimg.cn/507e174304f54cbd80f0827cc101ecbb.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Android 开发
文章平均质量分 92
Android 是一种基于 Linux 的自由及开放源代码的操作系统,主要使用于移动设备。这里是一些关于 Android 开发的分享,一起交流,共同进步!
ByteSaid
KEEP LOVING, KEEP LIVING.
展开
-
Android Binder 通信一次拷贝的原理
对于 Android 开发者来说 Binder 应该不会陌生了,Binder 是 Android 提供的 IPC 通信机制,它是通过内存映射实现的,而这也是 Binder 相对于其他传统进程间通信方式的优点之一,即我们说的 Binder 只需要做“一次拷贝”,而其他传统方式需要“两次拷贝”!那么,这所谓的“一次拷贝”的实现原理到底是什么?原创 2022-12-13 10:36:59 · 2064 阅读 · 1 评论 -
为什么 Android 要采用 Binder 作为 IPC 机制?
通过 mmap,Binder 通信时,只需要经历一次数据复制,性能要优于管道、消息队列、socket等方式,在安全性,易用性方面又优于共享内存。鉴于上述原因,Android 选择了这种折中的 IPC 方式,来满足系统对稳定性、传输性能和安全性方面的要求。原创 2022-12-12 17:45:05 · 1133 阅读 · 0 评论 -
SurfaceView 与 TextureView 详解
播放视频或者渲染其他的动画的时候,有两个 View 组件可供选择,SurfaceView 和 TextureView。在 Android 7.0 上系统 Surfaceview 的性能比 TextureView 更有优势,支持对象的内容位置和包含的应用内容同步更新,平移、缩放不会产生黑边。 在7.0以下系统如果使用场景有动画效果,可以选择性使用TextureView。原创 2022-10-24 10:00:00 · 7662 阅读 · 0 评论 -
Android 基于共享内存实现跨进程大数据的高效传输
Android 基于共享内存实现跨进程大数据的高效传输。目前有很多智能设备采用了Android系统,对Camera,图形渲染都有很多不同于手机App的需求,在没有很好的跨进程传输方案的情况,有些项目只能把很多业务功能杂糅在一个App进程中,使模块承载的业务功能不是很清晰,有了这种方案,可以更加优化项目模型架构的设计。原创 2022-09-22 20:00:00 · 3879 阅读 · 2 评论 -
如何解决 java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader
在 ndk 项目中,运行时出现 crash,当报错信息为:java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file ]]] couldn't find "xxx.so"时,是因为so文件加载异常。原创 2021-04-28 21:29:44 · 9491 阅读 · 0 评论 -
NDK 开发之 JNI 方法静态注册与动态注册
上文说到,进行 NDK 开发的时候,我们首先需要把 Java 方法声明为 native,然后编写对应的 C/C++ 代码,并编译成为动态链接库,在调用 Java 方法前加载动态链接库即可调用。那么,Java 层中的方法是如何与 native 层的函数一一对应的呢?这里有两种方法:静态注册、动态注册。下面进行详细介绍。......原创 2020-10-30 22:09:59 · 1729 阅读 · 2 评论 -
NDK 开发之 ndk-build 的使用
dk-build 本质上是一个脚本,它的位置就在 NDK 目录的最上层,即在< NDK >/ndk-build 路径下。运行 ndk-build 脚本相当于运行以下命令:$GNUMAKE -f <ndk>/build/core/build-local.mk<parameters>$GNUMAKE 指向 GNU Make 3.81 或更高版本, 则指向 NDK 安装目录。......原创 2020-09-29 21:53:26 · 15240 阅读 · 2 评论 -
NDK 开发之 CMake 的使用
CMake 是一个开源的跨平台自动化构建系统。之前做 NDK 开发或者老的项目都是基于 Android.mk、Application.mk 来构建项目的,但从 AS 2.2 之后便开始采用 CMake 的方式来构建 C/C++ 项目,采用 CMake 相比与之前的 Android.mk、Application.mk 方便简单了许多。......原创 2020-09-28 22:49:10 · 2938 阅读 · 3 评论 -
NDK 入门指南
NDK 即 Native Development Kit,是 Android 中的一个开发工具包,使您能够在 Android 应用中使用 C 和 C++ 代码,并提供众多平台库,您可使用这些平台库管理原生 Activity 和访问物理设备组件,例如传感器和触摸输入。NDK 是我们实现 Java 与 Native 进行交互的一种方式。......原创 2020-09-24 22:31:33 · 7194 阅读 · 1 评论 -
Camera1 源码解析系列(五)—— Camera1 takePicture() 流程解析
前面几篇文章已经把 Camera 控制流的部分梳理得比较清楚了。在 Camera 流程中,还有一个重要的部分,即数据流。Camera API 1 中,数据流主要是通过函数回调的方式,依照从下往上的方向,逐层 return 到 Applications 中。本篇将数据流与 Camera 的控制流结合起来,从 takePicture() 方法切入,追踪一个比较完整的 Camera 流程。.........原创 2022-08-05 21:00:00 · 1328 阅读 · 0 评论 -
Camera1 源码解析系列(三)—— Camera1 hw_get_module() 解析
这一章,我们将从 `hw_get_module()` 函数入手,去探究 `Libraries` 层是如何调用 `HAL` 层的库中的函数的。`CameraService` 是在开机时就会启动的,而当它第一次启动时,就会调用一个名为 `onFirstRef()` 的成员函数,我们所要探究的内容就是从这里开始的。.........原创 2022-08-03 10:00:38 · 580 阅读 · 0 评论 -
Camera1 源码解析系列(四)—— Camera1 startPreview() 流程解析
上一篇关于分析了 `hw_get_module()` 的调用逻辑,本篇通过追踪 `Camera.startPreview()` 方法,以加深对控制流的理解。原创 2022-08-04 11:02:50 · 520 阅读 · 0 评论 -
Camera1 源码解析系列(二)—— Camera1 Open() 流程解析
这一章里,我们将 `Camera.java` 中的 `open()` 方法作为切入点,按照 `Framework -> Android Runtime -> C/C++ Libraries -> HAL` 的顺序去分析整个调用流程。原创 2022-08-02 09:59:05 · 728 阅读 · 0 评论 -
Camera1 源码解析系列(一)—— Camera1 基本架构
虽然 Android5.0 开始弃用 Camera API1,但是各个手机厂商对 Camera API2 的支持是一个渐进式的过程,所以淘汰周期是比较长的,在很多高版本中使用 Camera API1 也是很常见的情况。原创 2022-08-01 15:59:20 · 897 阅读 · 0 评论 -
Android AudioEffect 音效方案
Android2.3 增加了对音频混响的支持,通过 AudioEffect 可以方便地对 AudioTrack 和 MediaPlayer 播放的音乐进行音效控制。Android 9.0 新增了用于 DynamicsProcessing 的 AudioEffect API,使用此类,我们可以构建基于通道的音频效果,包括各种类型的多个阶段,包括均衡,多频段压缩和限制。频段和活动阶段的数量是可配置的,并且大多数参数可以实时控制,例如增益、启动/释放时间、阈值等。......原创 2022-06-17 10:08:37 · 5162 阅读 · 0 评论 -
Android 进程间通信
IPC(Inter-Process Communication)为进程间通信或跨进程通信,是指两个进程之间进行间通信的过程。在Android 中,为每个进程都分配了一个独立的虚拟机,不同虚拟机在内存分配上都有不同的地址空间,互相访问数据需要借助其他手段。......原创 2022-01-08 18:00:00 · 6088 阅读 · 2 评论 -
Android AIDL 使用教程
AIDL(Android Interface Definition Language)是一种 IDL 语言,用于生成可以在 Android 设备上两个进程之间进行进程间通信(IPC)的代码。 通过 AIDL,可以在一个进程中获取另一个进程的数据和调用其暴露出来的方法,从而满足进程间通信的需求。通常,暴露方法给其他应用进行调用的应用称为服务端,调用其他应用的方法的应用称为客户端,客户端通过绑定服务端的 Service 来进行交互。...原创 2022-01-07 20:30:00 · 31150 阅读 · 10 评论 -
Android 蓝牙手柄开发
有些手游是支持手柄操作的,通过连接蓝牙手柄,可以极大的提升游戏的用户体验,Android 中提供了用于检测和处理来自蓝牙手柄的用户输入的 API。原创 2021-10-29 11:40:54 · 8360 阅读 · 4 评论 -
Android 双屏异显
日常生活中,有时候会遇到 Android 设备连接两个屏幕进行显示的问题,比如酒店登记信息时,一个屏幕用于员工操作,一个屏幕显示相关信息供顾客查看。这里就涉及到 Android 的双屏异显的问题,实现 Android 的双屏异显,Google 也提供了相应的 API 方法 Presentation。......原创 2021-10-14 20:13:35 · 9790 阅读 · 5 评论 -
Android 内存泄露分析
内存泄漏是指内存空间使用完毕后无法被释放的现象。尽管Java有垃圾回收机制(GC),但是对于还保持着引用,逻辑上却已经不会再用到的对象,垃圾回收器不会回收它们。用户对单次的内存泄漏并没有什么感知,但当可用的空闲空间越来越少,GC就会更容易被触发,GC进行时会停止其他线程的工作,因此有可能会造成界面卡顿等情况。后续需要分配内存的时候,很容易导致内存空间不足而出现 OOM(内存溢出)。...原创 2021-09-03 14:33:30 · 3863 阅读 · 2 评论 -
Android 内存泄漏检测工具 LeakCanary 的使用
LeakCanary 是 Square 公司为 Android 开发者提供的一个自动检测内存泄漏的工具,LeakCanary 本质上是一个基于 MAT 进行 Android 应用程序内存泄漏自动化检测的的开源工具,我们可以通过集成 LeakCanary 提供的 jar 包到自己的工程中,一旦检测到内存泄漏,LeakCanary 就会 dump Memory 信息,并通过另一个进程分析内存泄漏的信息并展示出来,随时发现和定位内存泄漏问题,极大地方便了Android应用程序的开发。...原创 2021-09-03 11:49:56 · 13965 阅读 · 1 评论 -
Android Studio Memory Profile 的使用
Memory Profiler 是 Android Profiler 中的一个组件,它可以帮助你识别内存泄漏和内存溢出,从而导致存根、冻结甚至应用程序崩溃。它显示了应用程序内存使用的实时图,让你捕获堆转储、强制垃圾收集和跟踪内存分配。......原创 2021-09-02 21:05:47 · 4807 阅读 · 2 评论 -
Android 如何获取传感器的数据
传感器 Sensor 是一种检测装置,能感受到被测量的信息,并能将感受到的信息,按一定规律变换成为电信号或其他所需形式的信息输出,以满足信息的传输、处理、存储、显示、记录和控制等要求。Android 提供了对设备传感器的支持,只要 Android 设备的硬件提供了这些传感器,Android 应用可以通过传感器来获取设备的外界条件,包括手机的运行状态、当前摆放的方向等。Android 系统还提供了驱动程序去管理这些传感器硬件,可以通过监听器的方式监听传感器硬件感知到的外部环境的变化。...原创 2021-08-24 15:38:15 · 24407 阅读 · 18 评论 -
Android 自定义水波球清理内存的悬浮窗小工具
一、概述现在一些手机管家都会有一个用来清理内存的悬浮窗小工具,感觉挺实用的,就自己做了一个。首先介绍一下这个工具的功能,除了可以清理内存,还有调节手机屏幕亮度、手电筒、无线网、移动数据、蓝牙、GPS开关的功能。原创 2016-10-31 17:34:53 · 4644 阅读 · 1 评论