随笔分类 -  Android

摘要:【Android】基于SurfaceControlViewHost实现跨进程渲染1 前言 ​ 本文将介绍基于 SurfaceControlViewHost 实现跨进程渲染普通 View 和 GlSurfaceView,力求用最简单的 Demo,介绍 SurfaceControlViewHost 的应用,方便读者轻松扣出核心代码应用到自己的业务中。 ​ 核心代码片段如下。 ​ 1 阅读全文
posted @ 2025-10-05 11:27 little_fat_sheep 阅读(183) 评论(0) 推荐(0)
摘要:【Android】RuntimeShader 应用1 简介 ​ RuntimeShader 是 Android 13(T)中新增的特性,用于逐像素渲染界面,它使用 AGSL(Android Graphics Shading Language)编写着色器代码,底层基于 Skia 图形渲染引擎。官方介绍详见 → RuntimeShader。 ​ 相较于 阅读全文
posted @ 2025-10-04 12:00 little_fat_sheep 阅读(81) 评论(0) 推荐(0)
摘要:1 前言 ​ ContentProvider 即内容提供器,是 Android 四大组件之一,为 App 存取数据提供统一的对外接口,让不同的应用之间可以共享数据。 ​ 如图,Server 端通过 ContentProvider 对外提供操作本地数据(DataBase、File 等)的接口,Clie 阅读全文
posted @ 2023-03-19 17:06 little_fat_sheep 阅读(472) 评论(0) 推荐(0)
摘要:1 前言 使用ContentProvider实现跨进程通讯 中介绍了自定义 ContentProvider,为外界提供操作 SQLite 的接口。但是大多数情况下,服务端的 ContentProvider 不需要用户编写,用户只需要知道怎么调用就行,比如系统资源。因此,本文将以监控飞行模式状态和最新 阅读全文
posted @ 2023-03-19 17:06 little_fat_sheep 阅读(199) 评论(0) 推荐(0)
摘要:1 前言 ​ Handler 即处理器,常用于跨线程通讯:线程A 和线程 B 拥有同一个 handler 对象,在线程 A 中使用 handler 的 sendMessage() 方法发送消息,在线程 B 中使用 handler 的 handleMessage() 方法处理消息。 ​ Handler 阅读全文
posted @ 2023-03-19 17:05 little_fat_sheep 阅读(262) 评论(0) 推荐(0)
摘要:1 前言 ​ MediaCodec 主要用于视频解码和编码操作,可以实现视频倍速播放、全关键帧转换、视频倒放等功能。 ​ MediaCodec 的工作原理图如下: ​ MediaCodec 的主要接口如下: //创建解码器(type为mime或name) public static MediaCod 阅读全文
posted @ 2023-03-19 17:05 little_fat_sheep 阅读(798) 评论(0) 推荐(0)
摘要:1 前言 使用MediaExtractor、MediaMuxer去掉视频文件中的音频数据 中介绍了 MediaExtractor 类的主要方法,本文主要将使用其 advance() 和 seekTo(timeUs, mode) 方法遍历帧,以获取关键帧的时间戳。 ​ advance() 方法能够从任 阅读全文
posted @ 2023-03-19 17:04 little_fat_sheep 阅读(348) 评论(0) 推荐(0)
摘要:1 环境配置与初始化 ​ (1)申请权限 ​ 在 AndroidManifest.xml 中的 manifest 标签(application 同级标签)下添加外部存储读写权限,如下: <uses-permission android:name="android.permission.WRITE_E 阅读全文
posted @ 2023-03-19 17:00 little_fat_sheep 阅读(600) 评论(0) 推荐(0)
摘要:1 简介 ​ 本文以 mp4 文件为例,讲解去音频操作。mp4 是一种视频封装的容器,里面包含音频(audio)和视频(video)数据,对应的数据编码格式分别为 aac 和 h264。在去音频过程中,主要使用到 MediaFormat、MediaExtractor、MediaMuxer,其作用如下 阅读全文
posted @ 2023-03-19 17:00 little_fat_sheep 阅读(272) 评论(0) 推荐(0)
摘要:1 前言 使用Socket实现跨设备通讯 中介绍了使用 WiFi 通道实现跨设备通讯,本文将介绍使用 Bluetooth 通道实现跨进程通讯。 ​ 本文全部代码见→使用BluetoothSocket实现跨设备通讯 1.1 蓝牙通讯核心类 ​ 在蓝牙通讯中,主要用到 BluetoothAdapter、 阅读全文
posted @ 2023-03-19 17:00 little_fat_sheep 阅读(458) 评论(0) 推荐(0)
摘要:1 前言 ​ ExoPlayer 是 google 开源的应用级媒体播放器,github源码 → https://github.com/google/ExoPlayer。相较于 MediaPlayer,ExoPlayer 具有以下优点: 支持更多的视频播放格式(包含 DASH 和 SmoothStr 阅读全文
posted @ 2023-03-19 16:59 little_fat_sheep 阅读(832) 评论(0) 推荐(0)
摘要:1 Socket 简介 ​ Socket(套接字)是应用层与 TCP/IP 协议通信的中间软件抽象层,它是一组接口,用户只需面向 Socket 编程,即可实现跨设备(网络)通讯。 ​ Socket 是 java 里的东西,不是 Android 特有的,使用 Socket 需要导入的类如下。 java 阅读全文
posted @ 2023-03-19 16:59 little_fat_sheep 阅读(458) 评论(0) 推荐(0)
摘要:1 前言 使用AIDL实现进程间通讯简单案例 和 使用AIDL实现进程间传递对象案例 中介绍了使用 AIDL 进行进程间通讯,文中提到在编写完 aidl 文件(如:IMessageManager.aidl)并 Make Buidl 后,会生成一个接口(如:IMessageManager.java), 阅读全文
posted @ 2023-03-19 16:59 little_fat_sheep 阅读(157) 评论(0) 推荐(0)
摘要:1 前言 使用AIDL实现进程间通讯简单案例 和 使用AIDL实现进程间传递对象案例 中介绍了使用 AIDL 进行进程间通讯,其本质仍然是Binder,aidl 文件对应生成的接口中,将服务端调用的抽象类(Stub)和客户端调用的代理类(Proxy)糅合在一个 java 文件中,使得新手读起来云里雾 阅读全文
posted @ 2023-03-19 16:59 little_fat_sheep 阅读(105) 评论(0) 推荐(0)
摘要:1 Messenger 简介 ​ Messenger 类实现了 Parcelable 接口,用于进程间传输并处理消息,调用流程如下: Client 通过 bindService() 请求绑定 Service Service 通过 messenger_s.getBinder() 获取 IBunder 阅读全文
posted @ 2023-03-19 16:58 little_fat_sheep 阅读(244) 评论(0) 推荐(0)
摘要:1 AIDL 简介 ​ AIDL(Android Interface Definition Language)是一种接口定义语言,用于生成可在 Android 设备上两个进程之间进行进程间通信(IPC)的代码。通过定义编辑 adil 文件,build 后生成对应的 java 类。 ​ 如下,为定义的 阅读全文
posted @ 2023-03-19 16:58 little_fat_sheep 阅读(494) 评论(0) 推荐(0)
摘要:1 前言 ​ 在 Android——使用AIDL实现进程间通讯简单案例 中介绍了使用 AIDL 在进程间传递字符串,对于8种基本数据类型( byte、short、int、long、float、double、boolean、char )和 CharSequence(包含 String )、List、M 阅读全文
posted @ 2023-03-19 16:58 little_fat_sheep 阅读(296) 评论(0) 推荐(0)
摘要:1 Broastcast 简介 ​ Broadcast(广播)是 Android 中一种广泛运用的在应用程序之间传输信息的机制。使用 Broadcast 能够很方便得实现进程间通讯,一端通过 sendBroadcast(intent) 广播消息,另一端通过 registerReceiver(myRe 阅读全文
posted @ 2023-03-19 16:57 little_fat_sheep 阅读(116) 评论(0) 推荐(0)
摘要:1 问题描述 ​ 在旋转屏幕时,记录旋转屏幕次数的计数器(count)一直为 0,不能实现累加效果。主要因为在旋转屏幕时,会销毁原来的变量,重新构建界面。 2 解决思路 ​ 在 Activity 销毁(onDestroy)之前,将 count 保存到 Bundle中,再在 Activity 构建(o 阅读全文
posted @ 2023-03-19 16:56 little_fat_sheep 阅读(120) 评论(0) 推荐(0)
摘要:1问题描述 如图1.1,有5个哲学家围着一个大圆桌就餐。哲学家和筷子都按逆时针顺序编号,每个哲学家的编号与他左边的筷子的编号一致。 规定如下: (1)哲学家之间不相互交流; (2)哲学家只做两件事:吃饭或思考; (3)每个哲学家只能拿其邻近的左右两支筷子; (4)哲学家不能抢占别人已经拿起的筷子; 阅读全文
posted @ 2023-03-19 16:56 little_fat_sheep 阅读(50) 评论(0) 推荐(0)