自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 以一种简单的方式来实现弹幕效果

弹幕的无限滚动:确保弹幕能够连续地滚动,而不是在到达末尾时重新开始。弹幕的多行显示:能够在屏幕上同时显示多行弹幕,并且每行弹幕独立滚动。滚动速度的控制:能够控制弹幕的滚动速度,以实现流畅的视觉效果。本文将通过一个示例项目来展示如何实现上述功能。gif图有点卡,可以自行运行一下看效果。通过本文的介绍,我们实现了一种简单的弹幕效果。使用和,不仅实现了多行弹幕的效果,还可以通过控制scrollBy方法的速度,实现弹幕的平滑滚动。这种方式非常适合在需要显示大量动态文本信息的场景中使用,例如商品评论等。

2024-09-20 13:46:57 144

原创 gradle ‘flavorDimensions‘ is deprecated

'flavorDimensions' is deprecated 解决办法

2024-09-18 16:39:59 84

转载 一款高效的HarmonyOS工具包

efTool是一个功能丰富且易用的兼容API12的HarmonyOS工具库,通过诸多实用工具类的使用,旨在帮助开发者快速、便捷地完成各类开发任务。这些封装的工具涵盖了字符串、数字、集合、JSON等一系列操作, 可以满足各种不同的开发需求。本人为Java开发,故封装思路借鉴Java的工具类Hutool,同时扩展了HarmonyOS的UI组件。

2024-09-18 10:22:48 127

转载 现代应用架构最佳实践

尽管架构模式可以有多种实现方式,但核心目标始终是实现高内聚和低耦合,从而提高代码的可读性、健壮性和可扩展性。在实际应用中,根据项目的具体需求和约束,灵活应用这些架构理念,才能构建出适合自身项目的最佳架构。作者:麦客奥德彪链接:https://juejin.cn/post/7377220397403865142来源:稀土掘金著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

2024-09-14 13:33:14 223

转载 解锁 combine 在 Android 开发中的应用

Kotlin 中的combine操作符是一个功能强大的工具,可以将多个流组合成一个流。在 Android 开发中,尤其是在使用 Jetpack Compose 时,它可以极大地简化状态管理和数据处理。本文将探讨combine操作符的用法和优点,并通过示例展示其在 Android 开发中的应用。

2024-09-14 13:24:02 145

转载 一文掌握直播技术:实时音视频采集、编码、传输与播放

推流端:| 采集模块 | -> | 编码器 | -> | 传输模块 || (音视频采集) | | (音视频编码) | | (音视频传输) |服务器端:| 负载均衡 | -> | 转码 | -> | 录制 || (接收并分发流) | | (转换编码格式) | | (存储音视频数据)|拉流端:| 解码器 | -> | 渲染模块 | -> | 播放器 || (音视频解码) | | (音视频渲染) | | (音视频播放) |推流端需要实现音视频采集、编码、传输等功能。

2024-09-11 10:52:53 236

转载 十分钟实现 Android Camera2 视频录制

因为工作中要使用,但因为Camera2比较复杂,网上资料也比较乱,有一定入门门槛,所以花了几天时间系统研究了下,并在CSDN上记录了下,希望能帮助到更多的小伙伴。上两篇文章使用Camera2实现了相机预览和拍照的功能,这篇文章我们接着上文,来实现Camera2视频录制的功能。

2024-09-11 10:45:28 200

转载 十分钟实现 Android Camera2 相机拍照

因为工作中要使用,但因为Camera2比较复杂,网上资料也比较乱,有一定入门门槛,所以花了几天时间系统研究了下,并在CSDN上记录了下,希望能帮助到更多的小伙伴。上篇文章我们使用Camera2实现了相机预览的功能,这篇文章我们接着上文,来实现Camera2相机拍照的功能。

2024-09-11 10:32:33 229

转载 经典实战之用Kotlin泛型实现键值对缓存

Kotlin 中的泛型是一种允许类型参数化的特性。它可以增强代码的重用性、类型安全性和可读性。在实际编写代码时,通过泛型,你可以编写更为通用的类和方法,而不必具体针对某种特定类型。

2024-09-11 10:16:22 76

转载 Surface截图方法总结

本篇,我们主要针对Surface截屏方法进行了总结,当然,如果要放到生产环境,如果仅仅是简单的截图就已经够了,但是要是实现视频录制,我们还需要做更多的内存优化,比如前文提到的Bitmap池化(享元模式)。另外我们还可能涉及Bitmap转ByteBuffer(Direct ByteBuffer 不会因为GC而整理内存碎片,引发内存地址变化)的处理,意味着ByteBuffer池化,这部分就不赘述了。Android Surface截图方法总结作者:时光少年。

2024-09-10 17:05:45 200

转载 主流热更新方案盘点

差量的方式给出patch.dex,然后将patch.dex与应用的classes.dex合并成一个完整的dex,完整dex加载得到dexFile对象作为参数构建一个Element对象然后整体替换掉旧的dex-Elements数组。随着时代的发展,生活节奏的加快,人们对于互联网的需求日益加深,再加上IT技术的日新月异,导致应用的更新频率越来越快。Hook了ClassLoader.pathList.dexElements[],将补丁的dex插入到数组的最前端,所以会优先查找到修复的类,从而达到修复的效果。

2024-09-10 15:01:48 148

转载 开发中常用的adb指令

adb是一款强大的命令行工具,对于 Android 开发和调试至关重要。下面介绍开发过程中,一些常用的 adb 指令。关于 adb 详细的介绍可以看或者使用adb --help命令获取信息。

2024-09-10 14:51:46 80

转载 为什么View的 onDetachedFromWindow 方法不一定执行

其实 setView 是在 onResume 方法之后,内部流程是通过 PhoneWindow 获取 WindowManagerImpl 来调用 addView 方法,其内部会调用 WindowManagerGlobal.addView 方法,最后调到 ViewRootImpl 的 setView 方法。从源码中可以看到,View 的 onDetachedFromWindow 方法其内部是由 View 的 dispatchDetachedFromWindow 调用的。

2024-09-10 14:46:48 38

转载 动态权限申请 | 2次不允许权限导致申请权限不再弹框

shouldShowRequestPermissionRationale() 是 Android 系统中的一个 API,用于检查用户是否应该看到权限请求解释. 当您第一次请求一个危险权限时,系统会自动显示一个解释对话框,说明该权限的用途以及为什么您的应用需要它。14平台,录音应用需要申请麦克风权限,点击录音按钮时候会先检测是否有麦克风权限,如果有则直接开始录音,否则申请麦克风权限,当用户测试时候2次出现权限申请弹框都都选择不允许,第三次次就不再权限申请弹框。false: 表示用户不应该看到权限请求解释。

2024-09-06 20:07:52 135

转载 大厂 Android 可视化埋点实现

viewID是根据view的层级来确定的,如果项目进行重构或者变更层级,相同view的viewID就会变化,导致很多view要重新配置,有一种约束ID的方案,就是单独生成一个view与viewID的对应表,但是这样在添加新view时又要做相应的对应,也会带来开发上的不便利,所以目前还是维持现有的生成viewID的方案,当遇到重构或者层级变动的问题时就只能将上报的点迁移并重新生成viewID再上报,这是一个待优化的方向,后续想到合适的方案时会将其优化。然后在回调中做相应的操作,可以实现代码解藕。

2024-09-06 10:38:30 669

转载 一文看懂DecorView的一生

DecorView的主要角色是作为顶层容器,承载着应用的视图结构。当在应用中使用setContentView方法加载布局时,实际上是将这个布局作为子视图添加到DecorView中。因此,DecorView定义了应用界面的边界,所有的视图都在这个边界内进行绘制和事件分发。下面我们来说一下,DecorView与Window、Activity和ViewRootImpl之间的关系,这能够更好地帮助我们理解应用的视图层次结构。最后,总结一下,整个流程主要可以归纳为四步:在Activity的attach()

2024-09-06 10:21:07 321

转载 不同版本上 Bitmap 内存分配与回收对比

到这里,Bitmap 的分配和回收过程就分析完了。你会发现在 Android 8.0 以前的版本,Bitmap 的像素数据是存在 Java 堆的,Bitmap 数据放在 Java 堆容易造成 Java OOM,也没有完全利用起来系统 Native 内存。那么,有没有可能让低版本也将 Bitmap 数据存在 Native 层呢?关注我,带你建立核心竞争力,我们下次见。参考资料管理位图内存 —— Android 官方文档。

2024-09-05 16:27:11 376

转载 Android 15 大变更:支持 16K 内存分页,所有 native app 必须重编译~

一直以来,Android 系统仅支持 4KB 的内存分页大小,这在一定程度上限制了整体的性能。而随着设备制造商不断打造具有更大物理内存 (RAM) 的设备,这些设备中的许多可能会配置 16 KB(最终更大)的分页大小,作为 Android 系统设计者,是时候考虑是否需要支持 16KB 的设备了。所以,Google 团队的和于 2023 年针对 16KB 分页大小的 Android 性能表现进行了详细测试。

2024-09-05 16:20:54 498

转载 启动优化实践 - 秒开率从17%提升至75%

启动性能是App使用体验的门面,耗时过长会降低用户使用兴趣。对于开发者来说,通过各种技术手段来提升启动性能缩减启动时长,对整站业务的各项指标提升都会有较大帮助。因此,秒开率优化也成为了各个客户端团队在体验优化方向上十分重要的一环。本文将会结合我自己在项目中优化启动速度的经验,跟大家分享下,我眼里的科学的启动速度优化思路。在我的眼里,科学的优化策略是通用的,不管是针对什么性能指标不管是针对什么课题,思路是差不多的。比如这期的分享是启动优化,其实跟上期分享的。

2024-09-05 11:04:27 493

转载 包体积优化 · 彩蛋篇 · Android编译期PNG自动化转换WEBP

大家都知道 png 是比较占用App体积的,有没有工具可以在打包前(比如 assembleDebug、assembleRelease)自动去转化所有的 png 图片,包括第三方依赖库里面的呢?之前不经意间发现有一个神器cwebp 转化工具,是不是可以借鉴这种工具自己写个Plugin完成图片转换,同时支持检查大图片,图片大小可配置。话不多说,说干就干~编写插件前,需要思考几个业务痛点怎么拿到所有的 res 资源呢?自动化转换工具Task 的执行时机点?

2024-09-05 10:52:44 85

转载 你可能不知道的Android Context动态升降级与Context权限范围限定

Android 的 Context 大家肯定是不陌生了,它是安卓开发中不可或缺的概念,它允许我们访问系统资源,管理应用程序的生命周期,并与系统交互。实际开发中我们在使用 Toast,使用 Dialog,启动 Activity 与 Service ,加载资源,操作数据库,获取 App 相关的文件路径,创建 View 等操作时,都会涉及到一个 Context 引用。

2024-09-02 11:01:46 495

转载 Android - 修改屏幕的density,竟然会导致获取的dimension是错误的?

最后,我们来做个总结。在我们修改屏幕的density之后,仅更新Java层的值,并没有更新C++层。所以导致在获取dimension时,C++层用的是旧值去判断,所以导致dimension获取的不对。在我们更新完density之后,需要调用Resource的方法,去更新C++层的屏幕宽度(dp单位)额外补充两句,可能大家在实际开发过程中很少遇到这种问题,原因应该是,系统默认的屏幕宽度和我们修改density之后的屏幕宽度都比指定的values-wxxdp要大,或者要小,所以难以发现这个问题。

2024-08-28 16:39:06 42

转载 十分钟实现 Android Camera2 相机预览

因为工作中要使用,但因为Camera2比较复杂,网上资料也比较乱,有一定入门门槛,所以花了几天时间系统研究了下,并在CSDN上记录了下,希望能帮助到更多的小伙伴。Camera2 API的包名是android.hardware.camera2,是Android 5.0后推出的一套调用摄像头设备的接口,用来替换原有的Camera。Camera设备的管理类,通过该对象可以查询设备的Camera设备信息,得到CameraDevice对象。

2024-08-27 16:51:05 417

转载 Camera2的使用【详细】

可以避免等多种情况;同时建议将输出用的ImageReader设为全局变量。camera权限是必须申请的,如果需要保存图片还需要读写权限,并动态申请。

2024-08-27 16:40:07 70

转载 多媒体开发——Media3与MediaSession最全使用指南

官方释义:个人理解:Media3是Google推出的Android媒体播放库的最新版本,作为之前Media2库的后续升级版本,集成了ExoPlayer作为核心播放引擎。Media3的目标是统一之前分散的多个媒体库(如ExoPlayer,Media2等)到单一、现代化的API体系之下。官方释义:个人理解:媒体会话,即向系统公开正在播放的媒体信息,并对外开放控制端口。可以用它在多个App之间协调媒体控制的机制,通过创建一个中心化的会话来管理与音视频播放相关的各种操作。

2024-08-27 16:07:36 58

转载 AndroidX Media3之ExoPlayer简单使用(2)

在上一篇文章中介绍了ExoPlayer的简单使用,运用了media3-ui包中提供的关于ExoPlayer的UI组件和资源。但是在日常开发中,播放器的界面会被要求为各式各样的,没有办法使用media3-ui包中提供的通用界面。在这篇文章将介绍如何自己实现一个简单的PlayerView。

2024-08-27 16:07:11 138

转载 Media3 MediaSession框架的介绍和使用

通常我们写视频播放器可以使用mediaPalyer、ExoPlayer等,UI我们自己实现。我们开发过程中自己回实现一套接口或者回调,来处理Ui和Player直接的通信,也是可以的,但是如果我们有加入了其他的Ui控制,或者其他的app的连接,显的有些麻烦。所以谷歌推出了MediaSession框架,可以很好的解耦UI和播放器,以及统一的接口,可以更大的支持多设备的控制和连接。

2024-08-27 16:05:41 47

转载 Android Media3 MediaSession 的简单使用

简单明了的从中式英语去理解,Media 多媒体、 Session 会话MediaSession 是Google 官方提供的多媒体框架框架主要分为两部分:服务端、客户端服务端提供播放器的参数配置啥的客户端控制服务端具体操作;比如:播放、暂停、上一曲、下一曲等等自定义方式想要官方一点的理解自己去看官方文档:

2024-08-27 16:04:58 92

转载 Android Media3(二) — 在后台播放视频

目前主流的音视频App中,除了当用户正在使用时播放视频或音频,应用回到后台后音视频仍能继续播放的功能也很常见。本文简单介绍下如何使用Media3库实现在后台播放视频。

2024-08-27 16:04:38 49

转载 Android Media3 (一)— 简单播放视频

在App开发中偶尔会需要播放视频,JetPack Media3是目前官方主推的视频播放库,使用ExoPlayer作为默认播放器,让开发人员可以轻松的实现播放视频和音频功能。本文简单介绍下如何使用Media3库播放视频。

2024-08-27 16:04:28 72

转载 音频和视频概览

本部分介绍了用于处理音频和视频数据的核心 API,包括播放、编辑和录制等用例。您还可以在此处找到有关应用架构的建议和平台行为说明。:如需了解有关创建一流的多设备应用的最佳实践和指南,请访问。

2024-08-27 16:04:05 16

转载 3. Android 卡顿优化最佳实践Matrix &屏幕刷新机制 (2024精华版)

一般包括CPU、GPU、display三个部分,CPU一般负责计算数据,把计算好数据交给GPU,GPU会对图形数据进行渲染,渲染好后放到buffer里存起来,然后display(有的文章也叫屏幕或者显示器)负责把buffer里的数据呈现到屏幕上CPU负责包括Measure , Layout , Record , Execute 的计算操作, GPU 负责asterization(栅格化)操作1.1.1卡顿和CPU的关系。

2024-08-27 16:03:20 73

转载 稳定性优化:ANR监控方案

在程序发生 ANR 时,系统会弹出 ANR 的弹窗,并将 ANR 日志信息写入到 /data/anr/ 目录下的文件中,但是我们并没有直接的接口去感知到 ANR 发生了,也没有权限去读取 /data/anr/ 目录下的文件。但是为了提升程序的稳定性,对线上的 ANR 进行有效的监控是必不可少的,因此就需要我们在程序去中实现一套 ANR 的监控的方案。

2024-08-27 16:02:00 25

转载 Matrix工具抓取ANR

Matrix是一款微信研发并日常使用的应用性能接入框架,支持iOS, macOS和Android。Matrix通过接入各种性能监控方案,对性能监控项的异常数据进行采集和分析,输出相应的问题分析、定位与优化建议,从而帮助开发者开发出更高质量的应用。@Override@Override@Override@Override@Override@Override//todo 处理性能监控数据。

2024-08-27 16:01:10 21

转载 进程冻结机制

为了解决应用在后台默默消化cpu资源的问题,高版本的安卓实现了一套冻结进程的机制。总结一下就是,如果进程的oom adj大于CACHED_APP_MIN_ADJ,就会启动一个10分钟的定时器,在10分钟之内如果进程的oom adj一直没有变回小于CACHED_APP_MIN_ADJ就会冻结进程。addView源码太多我没有找到更新oom adj的逻辑,但是复现问题使用cat /proc/{pid}/oom_adj命令获取oom adj发现并不是大于900的,也复现不出10分钟被冻结的现象。

2024-08-27 16:00:27 18

转载 Android 15 线程挂起超时崩溃与修复

本文同样梳理了一下Android 15在线程挂起流程的变更,看来每次升级都要绞尽脑汁想想hook方案,不过找到方案那一刻还是蛮开心的。此次方案不一定最优解,因为这个循环等待操作不知道会不会带来ANR风险,或者影响卡顿率指标等等,但是还是那句话避免Crash优先级更高。同样,其实我们应用如果像拼多多整体流畅度高性能好,其实间接也不需要这种hook,这个只是没办法而为之。Android 15 线程挂起超时崩溃与修复作者:巴黎没有摩天轮。

2024-08-23 11:24:01 36

转载 从 XML 到 View 显示在屏幕上,都发生了什么?

View绘制可以说是Android开发的必备技能,但是关于View绘制的的知识点也有些繁杂。如果我们从头开始阅读源码,往往千头万绪,抓不住要领。目前当我们写页面时,布局都是写在XML布局从XML到显示到屏幕上,都发生了什么,可以分为哪几个部分?我们将整个显示流程分解为以下几个部分代码是怎么从XML转换成View的?View是怎么添加到页面上的?在内存中View到底是怎么绘制的?View绘制完成后是怎么显示到屏幕上的?从XML到View显示到屏幕上主要涉及到以下知识点Activity。

2024-08-23 11:17:00 34

转载 Android面试又因为Handler机制而被淘汰了之聊聊同步屏障

在Android 官方开发者网站的参考手册中,有一段关于这个方法的说明,算是简单的介绍了一下同步屏障[1]LooperLooper大体意思就是:在View绘制时,会在Looper中使用同步屏障,来确保在view下一帧绘制完之前其他同步消息都暂不处理。这里重点看第三段,这段第一句话说的很清楚:异步消息不受同步屏障限制。得,看完这个,感觉更迷茫了。不过既然说了是在Looper中会用到同步屏障,那么就看看Looper中在哪里用到了。

2024-08-23 11:06:50 34

转载 ART堆内存系列:GC抑制从入门到精通

本文从线下发现的GC导致主线程卡顿的问题入手引出抑制GC解决问题的思路,并对ART虚拟机执行GC的类型和触发时机做了详细的分析。从第一性原理出发,寻找可能的两种解决思路,分别是增大并发GC阈值和阻塞ConcurrentGCTask执行,并在这两种思路下探讨可落地的方案,最终成功找到阻塞ConcurrentGCTask执行的方案,并上线通过AB实验验证收益。

2024-08-22 17:30:40 41

转载 单页面首屏优化,打包后大小减少64M,加载速度快了13.6秒

大小、请求数、加载时间都大大减少注意优化后的时间chunk-vendors.js和app.js加载一共耗时1.59s,不是1.11+1.59,chunk-vendors的下载解析会阻塞app.js的下载解析,所以一共1.59s。前:image.png后:单页面首屏优化,打包后大小减少64M,加载速度快了13.6秒。

2024-08-22 11:24:13 38

二维码扫描ZxingDemo

一个二维码扫描例子

2016-04-06

ormlite-4.48

Android中用ormlite实现持sqlite持久化 共含三个jar包 ormlite-android-4.48.jar ormlite-core-4.48.jar ormlite-jdbc-4.48.jar

2014-11-29

jdk-6u45-linux-x64.part2

如标题示,此为linux下64位java 1.6jdk,经验可以安装运行:我的linux为64 位ubuntu: uname -a Linux kevin-virtual-machine 3.5.0-17-generic #28-Ubuntu SMP Tue Oct 9 19:31:23 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux

2013-07-31

jdk-6u45-linux-x64.part1

如标题示,此为linux下64位java 1.6jdk,经验可以安装运行:我的linux为64 位ubuntu: uname -a Linux kevin-virtual-machine 3.5.0-17-generic #28-Ubuntu SMP Tue Oct 9 19:31:23 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux

2013-07-31

空空如也

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

TA关注的人

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