- 博客(381)
- 收藏
- 关注
原创 程序员装机必备软件
这里记录我安装好系统之后必须要安装的一些软件官方地址。JavaSE JDK8:https://www.oracle.com/cn/java/technologies/javase/javase-jdk8-downloads.htmlAndroid Studio:https://developer.android.google.cn/studioIntelliJ IDEA:https://www.jetbrains.com/idea/Everything:https://www.voidtools.
2021-04-22 11:07:13
1531
原创 广州图书馆
写篇博客记录一下广州图书馆吧!今年的某一天第一次去广州图书馆,里面是真的宽广、干净又安静,图书很多,我想要的书几乎都有,可以说,你平时在广州购书中心想要买的书,在图书馆绝大多数都有,所以,为什么要花钱去买呢!而且图书馆里的书很多都是很新的,我以前天真的以为图书馆的书都是很旧的,我错了!广州图书馆里面环境真的很好,坐位超级多的,生怕你没地方做似的,可能是疫情期间,进馆需要预约,所以我看到坐位那么多,还没几个人做,不知道没疫情时没人数限制那时是不是坐位暴满的场面,就恨自己以前为什么不早点去图书馆逛逛,这样就
2021-02-03 15:47:16
1260
4
原创 想学习的内容零散笔记
突然间发现,可以学的东西好多,自己好多东西不会,好落后了,Android已经出了好多好用又新的东西自己都没花时间去学,不是学不会,只是没去学。谷歌还是很做实事的,Android更新非常快,包括android系统和相应的api,文档也是越来越丰富(相比早期的简单文档),可以看出谷歌是一家做实事的公司,是一家好公司,做Android,不会错的,关键看自己的学习能力了。在这个互联网时代,手机、电脑很容易分人的心,经常不记得自己要干什么了,所以这里记录一下自己想学的东西,迷茫的时候就来翻翻这个日志,找点喜欢的东
2020-09-10 17:00:12
841
原创 一看就懂的i++和++i详解
我相信很多朋友可能之前已经百度过i++和++i的相关文章了,也做过不少的练习,觉得自己已经深刻掌握了它们之间的原理了,真的是这样的吗?来试试计算一下我下面提供的几道练习,你就会发现你又不会了!
2020-05-09 22:10:35
55246
156
原创 Android发广播的坑
摘要:在Android 11设备上测试广播接收时发现异常现象:直接通过Android Studio重新运行应用会导致广播接收失效,而手动杀死进程后重启则正常。问题可能与广播未正确解除注册有关,在onDestroy()中添加unregisterReceiver()可部分解决。不同品牌手机表现不一致,某些强制停止操作会破坏广播接收功能。建议开发时遇到广播接收异常时手动杀死应用进程再测试,这比卸载重装更高效。
2026-04-12 14:22:27
203
原创 kotlin中的when
Kotlin的when表达式支持多种匹配方式:类型检查(is)、值相等判断、区间检查(in)等。示例中第一个分支使用is检查类型,后两个直接比较单例对象值。when还可用于任意布尔表达式,此时不跟括号。这种灵活语法允许在单个when结构中混合不同类型判断,简化了条件逻辑编写。
2026-04-09 15:12:05
244
原创 Preconditions.kt中require和check是什么区别 ?
Kotlin中require和check的关键区别:require验证调用者参数合法性(抛出IllegalArgumentException),用于方法入口检查;check验证对象内部状态正确性(抛出IllegalStateException),用于方法执行中的状态验证。简单记:require是"参数要对",check是"状态要对"。此外,assert仅调试用,业务代码不建议使用。
2026-04-08 18:53:22
36
原创 Android中有什么技术过时了可以直接用新技术的
Android技术过时替代指南(2026版) 【可淘汰技术】 AsyncTask:内存泄漏风险,改用Kotlin协程 ListView/ButterKnife:用RecyclerView/ViewBinding替代 Handler+Thread常规用法:优先使用协程Dispatchers 【建议替换技术】 XML UI:Jetpack Compose渐成主流 LiveData:推荐StateFlow/SharedFlow IntentService:改用WorkManager 【仍需保留技术】 Handle
2026-04-06 14:11:42
813
原创 AGPBI警告
Android项目编译时出现Kotlin元数据解析错误警告,提示R8工具版本与Kotlin版本不兼容。该警告通常在Kotlin版本高于R8发布时的兼容版本时出现,建议查看官方文档核对版本匹配关系。错误堆栈显示在处理类'IdentityActivity'的元数据重写时发生意外错误,涉及R8内部组件调用异常。解决方案包括:检查并调整Kotlin与R8版本匹配,或升级Android Gradle插件以获取兼容的R8版本。虽然警告可能不影响编译结果,但建议及时处理以避免潜在的运行时问题。
2026-04-02 15:08:37
50
原创 Lint错误
Android Lint检查发现项目存在错误,导致构建失败。主要问题是一个实现了Parcelable接口的类缺少必需的CREATOR字段。解决方案包括:1)正确实现Parcelable接口,添加CREATOR字段;2)使用Android Studio自动生成Parcelable代码;3)使用@Parcelize注解简化实现。临时解决方案可通过配置build.gradle忽略Lint错误或创建基线文件,但这无法解决潜在的运行时崩溃风险。建议优先采用正确实现Parcelable的方案,确保代码的健壮性。
2026-04-02 14:44:45
350
原创 阿里云仓库下载依赖失败
本文分析了Gradle构建时出现dataBindingMergeDependencyArtifactsNewDebug异常的问题原因和解决方案。主要问题是由于阿里云镜像仓库同步延迟,导致Gradle在找到pom文件后认为依赖存在,但实际aar文件未同步,且Gradle的负缓存机制会记录查找失败结果。解决方案包括:1) 配置仓库的metadataSources同时查找pom和aar;2) 使用--refresh-dependencies强制刷新依赖;3) 删除Gradle缓存目录。文中还解释了Gradle的依
2026-04-02 14:15:24
527
原创 Java中的Locale和TimeZone和ZoneId
摘要: Java中的Locale和TimeZone分别处理国际化的不同方面: Locale:定义语言和地区(如en_US、zh_CN),影响文本格式(数字、日期、货币的显示方式),例如中文显示“2026年3月31日”,英文显示“March 31, 2026”。 TimeZone:确定时区(如Asia/Shanghai),影响时间计算和显示,同一UTC时间在不同时区会转换为当地时间(如UTC 12:00对应北京20:00)。 核心区别: Locale控制“如何表达”(格式与语言),TimeZone控制“具体时
2026-04-01 09:06:51
225
原创 Java 7之后主要的新特性
Java 7 之后的主要新特性包括: Java 7(2011):try-with-resources、Switch支持String、Diamond操作符<>、多异常捕获 Java 8(2014):Lambda表达式、Stream API、函数式接口、Optional、方法引用、默认方法、新时间API Java 9(2017):模块系统、List.of() Java 10(2018):var局部变量类型推断 Java 11(LTS):String增强、HttpClient、Files API增强
2026-03-20 09:33:51
354
原创 Android图库选择器/文件选择器
2024-2026年Android图库/文件选择器开源库全景 ✅ 主流活跃库: 图库选择器:PictureSelector(全功能)、ImagePickerAndroid(轻量)、ImagePickerKMP(跨平台) 文件选择器:FilePicker、ComposeFilePicker(Compose专用) 官方方案:Android Photo Picker(未来主流) ⚠️ 已过时库: android-image-picker(已归档)、Android-FilePicker(兼容问题)、ChiliPho
2026-03-20 09:31:15
474
原创 Retrofit的一些高级使用示例
Retrofit高级使用摘要 本文介绍5个Retrofit高级用法:1) 动态BaseUrl切换,通过@Url或拦截器实现多域名支持;2) 统一错误处理,封装ApiResult类并自定义CallAdapter实现业务错误码解析;3) 自定义Converter处理统一数据结构、加密等场景;4) 文件上传进度监听,通过自定义RequestBody实现;5) 大文件下载优化方案。这些技巧可显著提升网络层的扩展性和性能表现。
2026-03-20 08:50:57
503
原创 编程中的Model、Domain、Entity等的含义
文章摘要: ViewModel中的"Model"并非单纯指数据模型,而是代表一种抽象表示。在软件架构中,Model层包含业务数据、规则和逻辑,而ViewModel特指为View准备的UI状态模型。它不同于业务Model,专门处理UI相关数据如加载状态、错误信息等。Android采用ViewModel而非Controller/Presenter,是因为它不直接操作UI,仅提供观察数据,且能自动处理配置变化。ViewModel本质上是View的数据容器和状态管理器,其命名准确反映了"
2026-03-07 16:26:18
455
原创 Kill process和Force stop process的区别
Android Studio中,在中,有一个和一个按钮,有什么区别,我何时选择用哪个来停止进程?这是一个非常好的问题 👍在 Android Studio 的它们底层行为完全不同。
2026-03-03 16:37:40
883
原创 ComponentActivity与AppCompatActivity 功能介绍
ComponentActivity是Jetpack架构的基础Activity,为Jetpack组件提供运行环境。它解决了传统Activity功能不足的问题,提供了生命周期感知、ViewModel管理、状态保存、结果回调等现代能力。ComponentActivity实现了多个关键接口,包括LifecycleOwner、ViewModelStoreOwner等,支持LiveData、协程、Fragment等功能。AndroidX将其从core库拆分到activity库,实现模块化架构,降低耦合。目前推荐使用an
2026-03-01 13:36:53
1068
原创 Github数据分析
GitStar Ranking 是一个对 GitHub 用户、组织和仓库按 Star 数量进行排序的网站,提供各类排行榜单,方便开发者发现热门项目和优质开发者。
2026-02-28 09:50:58
129
原创 仅用于编译的Adnroid.jar
本文介绍了开发跨平台日志库的方案,支持Java和Android项目自动适配不同日志输出方式。关键点包括:1)使用compileOnly依赖android.jar或Robolectric库检测平台;2)通过Class.forName检查android.os.Build类判断运行环境;3)提供Kotlin扩展函数简化日志调用。重点对比了两种Android依赖方案:轻量级的com.google.android:android(仅API16)和功能完整的org.robolectric:android-all(支持最
2026-02-26 10:34:28
767
原创 JUnit 4.x最新版本
摘要:Android Studio新建项目默认使用不存在的JUnit 4.14-SNAPSHOT版本会导致编译错误。实际上JUnit 4最新正式版是4.13.2,且已进入维护模式。建议开发者迁移至JUnit 5以获得长期支持和新特性,但Android官方仍未默认采用JUnit 5,原因尚不明确。(149字)
2026-01-30 12:58:15
326
原创 kotlin魔法runCatching
摘要:Kotlin的runCatching提供了一种简洁的方式来处理可能抛出异常的代码块,它返回一个Result对象。相比传统的try/catch,runCatching可以通过链式调用更优雅地处理异常情况,如使用getOrNull()在异常时返回null,或getOrDefault()返回默认值。Result类类似于Java的Optional,提供了onSuccess和onFailure等方法进行更灵活的操作。这种方法简化了异常处理代码,使开发者可以专注于业务逻辑。
2026-01-27 10:26:16
151
原创 kotlin by lazy 原理
Kotlin中的by lazy语法糖实现了属性的懒加载功能,其原理是通过封装初始化逻辑到Lazy类中。开发者可以手动实现类似功能(如示例中的SimpleLazy类),在首次访问属性时才执行初始化。标准库的lazy委托进一步简化了代码,只需一行声明即可实现懒加载,底层原理与手动实现类似,都是通过存储中间变量和延迟初始化来完成的。理解这一机制有助于更好地使用Kotlin的懒加载特性。
2025-12-22 11:05:15
293
转载 音视频播放在线资源示例地址(方便前端开发测试)包含MP4、FLV、HLS、m3u8、DASH h265 h266 RTC等格式
前端开发过程中,时常需要测试各种格式的视频播放,比如 MP4、FLV、HLS、DASH 甚至 音频,但找合适的测试资源往往很麻烦,为了方便开发,这里整理了一些稳定可用的视频播放示例地址,直接复制就能用!🎬 音视频播放在线资源示例地址(方便前端开发测试)包含MP4、FLV、HLS、m3u8、DASH h265 h266 RTC等格式。HLS 直播 (m3u8)HLS 直播 (h265)HLS 直播 (h266)📌 常见视频格式测试地址。
2025-12-01 14:52:27
7952
原创 编译最新版本FFmpeg为so
这篇文章主要介绍了在Android平台上编译支持文字水印功能的FFmpeg的过程。内容包括: 需求分析:需要在Android设备上采集摄像头YUV数据,通过FFmpeg添加水印并编码为H264格式 依赖关系:FFmpeg的drawtext功能需要FreeType和HarfBuzz支持,分别负责字体渲染和文字排版 软件下载: 下载Linux版NDK r27d 下载FreeType 2.14.1 下载FFmpeg 8.0 环境配置:设置编译路径、安装路径、交叉编译工具链等 文章提供了详细的下载链接和配置方法,为
2025-11-20 08:38:52
1191
原创 OkHttp连接复用
当使用`OkHttp`时,它会先建立TCP连接,然后再发送请求,当请求结束后,TCP连接并不是立马关闭的,而是缓存起来,直接空闲了一段时间后才会关闭,所以当你连续多次请求时,如果请求的服务器和协议(HTTP 1.1/2.0)相同,则它会复用之前的建立的连接,以加快请求速度。
2025-10-24 11:26:01
873
原创 App Startup
摘要:App Startup库用于解决Android库自动初始化问题。传统方式需要用户继承库的Application类进行初始化,但存在多库继承冲突问题。App Startup通过Initializer接口实现初始化逻辑,在清单文件中声明即可自动执行。支持初始化顺序控制、依赖管理,并允许禁用默认初始化或自定义初始化逻辑。相比Application方式更灵活,解决了多库初始化冲突问题,是Android官方推荐的库初始化方案。 (150字)
2025-10-21 11:39:19
703
原创 CMake环境配置
本文介绍了如何在Windows系统下独立使用CMake配合MinGW-w64进行项目构建。首先从CMake官网下载压缩版本并配置环境变量,验证安装后通过Pre-built Toolchains获取MinGW-w64工具链。重点讲解了工具链的选择标准,包括平台兼容性、运行库类型、位宽等关键参数,推荐了WinLibs.com等即用型版本。最后详细说明了如何配置CMake默认使用MinGW-w64编译器,并通过创建CMakeLists.txt文件验证配置成功。整个过程无需依赖VS等大型IDE,适合希望轻量化构建环
2025-10-20 10:58:13
1158
原创 发布aar到Maven Central
本文介绍了将Android库发布到Maven Central的完整流程。作者首先对比了发布到公司私服和云服务器的局限性,指出Maven Central的免费和全球可用优势。文章详细说明了Gradle配置步骤,包括使用maven-publish插件、设置发布参数和仓库认证信息。重点介绍了注册Maven Central账号和验证域名所有权的关键步骤,分享了使用阿里云DNS配置TXT记录的经验,并提供了验证DNS解析是否生效的具体方法。最后推荐了vanniktech/gradle-maven-publish-pl
2025-10-16 11:15:38
1023
原创 超好用的Android日志
这是一个使用 [tony19/logback-android](https://github.com/tony19/logback-android) 为 [JakeWharton/timber](https://github.com/JakeWharton/timber) 实现的Tree,结合了`Timber`可以自动使用当前类作为`tag`以及`logback`记录日志到文件的强大功能的各自优点,用于在`Android`中可以方便的将日志写到控制台以及文件中。
2025-10-15 17:34:26
944
原创 Gradle编译器选项配置
Kotlin编译器选项可通过Gradle DSL在三个层级配置:扩展层级(全局默认)、目标层级(特定目标默认)和编译单元层级(任务级)。较高级别设置作为低级别默认值,低级别可覆盖高级别配置。Kotlin 2.2.0后推荐使用新的compilerOptions替代已废弃的kotlinOptions,Android项目也需改用新方式配置如jvmTarget等选项。
2025-10-14 14:42:02
293
sokit-1.3-win32-chs(中文版)
2023-02-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅