- 博客(390)
- 收藏
- 关注
原创 程序员装机必备软件
这里记录我安装好系统之后必须要安装的一些软件官方地址。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
1671
原创 广州图书馆
写篇博客记录一下广州图书馆吧!今年的某一天第一次去广州图书馆,里面是真的宽广、干净又安静,图书很多,我想要的书几乎都有,可以说,你平时在广州购书中心想要买的书,在图书馆绝大多数都有,所以,为什么要花钱去买呢!而且图书馆里的书很多都是很新的,我以前天真的以为图书馆的书都是很旧的,我错了!广州图书馆里面环境真的很好,坐位超级多的,生怕你没地方做似的,可能是疫情期间,进馆需要预约,所以我看到坐位那么多,还没几个人做,不知道没疫情时没人数限制那时是不是坐位暴满的场面,就恨自己以前为什么不早点去图书馆逛逛,这样就
2021-02-03 15:47:16
1293
4
原创 想学习的内容零散笔记
突然间发现,可以学的东西好多,自己好多东西不会,好落后了,Android已经出了好多好用又新的东西自己都没花时间去学,不是学不会,只是没去学。谷歌还是很做实事的,Android更新非常快,包括android系统和相应的api,文档也是越来越丰富(相比早期的简单文档),可以看出谷歌是一家做实事的公司,是一家好公司,做Android,不会错的,关键看自己的学习能力了。在这个互联网时代,手机、电脑很容易分人的心,经常不记得自己要干什么了,所以这里记录一下自己想学的东西,迷茫的时候就来翻翻这个日志,找点喜欢的东
2020-09-10 17:00:12
864
原创 一看就懂的i++和++i详解
我相信很多朋友可能之前已经百度过i++和++i的相关文章了,也做过不少的练习,觉得自己已经深刻掌握了它们之间的原理了,真的是这样的吗?来试试计算一下我下面提供的几道练习,你就会发现你又不会了!
2020-05-09 22:10:35
55400
156
原创 安装Adnroid官方Skills
本文介绍了Android CLI和Android Skills的安装与配置方法。主要内容包括: 安装Android CLI:通过执行特定命令下载并配置环境变量,验证安装成功后可使用基本命令如--version、update等。 初始化Android CLI技能:执行android init命令自动检测并安装到已安装的Agent目录中,使Agent能识别和使用CLI功能。 安装Android Skills:需设置代理才能完成安装,文中提供了相关命令和注意事项。 文章还提供了官方文档参考链接,并解释了安装过程中
2026-06-15 11:21:22
342
原创 Android杀进程重启
该文章介绍了两种在Android中杀掉进程并自动重启应用的方法。第一种是通过保持一个Service存活,利用系统自动重启机制在进程被杀后重新启动应用,但需要注意Android 10及以上版本限制Service启动Activity。第二种更简单的方法是在杀进程前先启动主Activity,利用系统自动恢复机制实现重启。两种方法都需先调用finishAffinity()结束当前任务栈,再调用exitProcess(0)终止进程。文章详细说明了实现原理和代码示例,并比较了两种方案的优缺点。
2026-06-08 15:26:12
274
原创 Android SD卡读写测试
本文介绍了Android开发中getExternalFilesDirs(null)的用法,该方法返回包含内置存储和外置SD卡根目录的数组。内置存储是手机出厂自带且不可插拔的,而外置SD卡则允许用户自由插拔,便于数据传输。作者提到在定制Android设备上常使用外置SD卡存储视频,方便后续通过读卡器复制文件。此外,文章还分享了利用AI工具快速开发的经验,通过Android Studio自带的Gemini在几分钟内完成了一个SD卡测试程序(项目地址已提供),显著提高了开发效率。
2026-06-05 11:06:28
289
原创 快速删除集合中的元素
本文展示了在Kotlin中使用removeIf方法简洁删除集合元素的方式。对于List,可以删除包含特定字符的字符串;对于Map,可以删除key包含特定字符的条目。相比传统for循环可能引发的并发修改异常,removeIf方法提供了更安全简洁的实现方案,避免了手动使用Iterator的繁琐代码。示例代码演示了两种集合类型的删除操作及结果输出。
2026-05-27 15:28:55
67
原创 自定义EventBus
Android开发中替代EventBus并自动绑定生命周期的方案: 官方推荐方案: 使用Kotlin Flow + LifecycleScope 通过SharedFlow实现事件总线 使用repeatOnLifecycle自动绑定生命周期 其他方案: LiveData + ViewModel(经典方案) FlowBus(社区封装库) 非Activity场景处理: Service中使用自定义CoroutineScope LifecycleService自带lifecycleScope 单例模式中使用Appli
2026-05-11 10:26:06
322
原创 给Git项目添加多个远程仓库
我想实现这样一样功能:在公司,有个项目,太忙了时间不够写这个项目,所以周末我想在家里也进行工作,但是项目的git是在公司的,在家里访问不了,所以我想在github上创建一个项目,然后把公司项目push到github,且需要github上有所有的之前的提交记录,然后我回到家就可以从github上继续工作,且代码也提交到github上,到了上班时间回到公司后,把公司的项目也切换到github,以便获取最新代码,然后再切换回公司的git把最新提示push到公司git,这样行的通吗?具体要怎么操作?只是简单改gi
2026-04-24 17:57:25
276
原创 libs.versions.toml文件的使用
摘要 Android开发中使用libs.versions.toml文件统一管理依赖版本,采用TOML格式。文件位于项目根目录的gradle文件夹下,包含[versions]、[libraries]、[plugins]和[bundles]四个部分。关键特性是别名标准化处理:所有-、_和.在引用时都会转换为.(如androidx-ktx变为libs.androidx.ktx)。在build.gradle中通过libs.xxx引用依赖,通过libs.plugins.xxx引用插件。官方推荐使用kebab-case
2026-04-23 10:07:47
505
原创 Kotlin 集合常用操作
Kotlin集合操作摘要(150字): Kotlin集合操作可分为8大类:1)创建集合(listOf/mapOf等);2)转换操作(map/flatMap/zip);3)过滤操作(filter/take/drop);4)聚合计算(sum/count/fold);5)排序操作(sorted/sortedBy);6)查找元素(find/contains);7)分组操作(groupBy);8)集合运算(union/intersect)。常用操作包括:listOf(1,2,3).map{it*2}→[2,4,6],
2026-04-22 10:19:31
207
原创 ArrayList遍历时移除元素
摘要: 在处理服务器返回的[null]空数组时,需移除null元素后判断集合是否为空。错误使用for-each直接移除会抛ConcurrentModificationException,推荐四种正确方式: Iterator:通过iterator.remove()安全移除; removeIf(推荐):Java 8+的简洁写法list.removeIf(Objects::isNull); 倒序for循环:避免索引错位; 正序for循环:需手动i--补偿索引。 总结:首选removeIf,低版本用Iterator
2026-04-21 16:31:16
101
原创 Android发广播的坑
摘要:在Android 11设备上测试广播接收时发现异常现象:直接通过Android Studio重新运行应用会导致广播接收失效,而手动杀死进程后重启则正常。问题可能与广播未正确解除注册有关,在onDestroy()中添加unregisterReceiver()可部分解决。不同品牌手机表现不一致,某些强制停止操作会破坏广播接收功能。建议开发时遇到广播接收异常时手动杀死应用进程再测试,这比卸载重装更高效。
2026-04-12 14:22:27
253
原创 kotlin中的when
Kotlin的when表达式支持多种匹配方式:类型检查(is)、值相等判断、区间检查(in)等。示例中第一个分支使用is检查类型,后两个直接比较单例对象值。when还可用于任意布尔表达式,此时不跟括号。这种灵活语法允许在单个when结构中混合不同类型判断,简化了条件逻辑编写。
2026-04-09 15:12:05
284
原创 Preconditions.kt中require和check是什么区别 ?
Kotlin中require和check的关键区别:require验证调用者参数合法性(抛出IllegalArgumentException),用于方法入口检查;check验证对象内部状态正确性(抛出IllegalStateException),用于方法执行中的状态验证。简单记:require是"参数要对",check是"状态要对"。此外,assert仅调试用,业务代码不建议使用。
2026-04-08 18:53:22
82
原创 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
1001
原创 AGPBI警告
Android项目编译时出现Kotlin元数据解析错误警告,提示R8工具版本与Kotlin版本不兼容。该警告通常在Kotlin版本高于R8发布时的兼容版本时出现,建议查看官方文档核对版本匹配关系。错误堆栈显示在处理类'IdentityActivity'的元数据重写时发生意外错误,涉及R8内部组件调用异常。解决方案包括:检查并调整Kotlin与R8版本匹配,或升级Android Gradle插件以获取兼容的R8版本。虽然警告可能不影响编译结果,但建议及时处理以避免潜在的运行时问题。
2026-04-02 15:08:37
121
原创 Lint错误
Android Lint检查发现项目存在错误,导致构建失败。主要问题是一个实现了Parcelable接口的类缺少必需的CREATOR字段。解决方案包括:1)正确实现Parcelable接口,添加CREATOR字段;2)使用Android Studio自动生成Parcelable代码;3)使用@Parcelize注解简化实现。临时解决方案可通过配置build.gradle忽略Lint错误或创建基线文件,但这无法解决潜在的运行时崩溃风险。建议优先采用正确实现Parcelable的方案,确保代码的健壮性。
2026-04-02 14:44:45
431
原创 阿里云仓库下载依赖失败
本文分析了Gradle构建时出现dataBindingMergeDependencyArtifactsNewDebug异常的问题原因和解决方案。主要问题是由于阿里云镜像仓库同步延迟,导致Gradle在找到pom文件后认为依赖存在,但实际aar文件未同步,且Gradle的负缓存机制会记录查找失败结果。解决方案包括:1) 配置仓库的metadataSources同时查找pom和aar;2) 使用--refresh-dependencies强制刷新依赖;3) 删除Gradle缓存目录。文中还解释了Gradle的依
2026-04-02 14:15:24
613
原创 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
318
原创 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
424
原创 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
627
原创 Retrofit的一些高级使用示例
Retrofit高级使用摘要 本文介绍5个Retrofit高级用法:1) 动态BaseUrl切换,通过@Url或拦截器实现多域名支持;2) 统一错误处理,封装ApiResult类并自定义CallAdapter实现业务错误码解析;3) 自定义Converter处理统一数据结构、加密等场景;4) 文件上传进度监听,通过自定义RequestBody实现;5) 大文件下载优化方案。这些技巧可显著提升网络层的扩展性和性能表现。
2026-03-20 08:50:57
569
原创 编程中的Model、Domain、Entity等的含义
文章摘要: ViewModel中的"Model"并非单纯指数据模型,而是代表一种抽象表示。在软件架构中,Model层包含业务数据、规则和逻辑,而ViewModel特指为View准备的UI状态模型。它不同于业务Model,专门处理UI相关数据如加载状态、错误信息等。Android采用ViewModel而非Controller/Presenter,是因为它不直接操作UI,仅提供观察数据,且能自动处理配置变化。ViewModel本质上是View的数据容器和状态管理器,其命名准确反映了"
2026-03-07 16:26:18
516
原创 Kill process和Force stop process的区别
Android Studio中,在中,有一个和一个按钮,有什么区别,我何时选择用哪个来停止进程?这是一个非常好的问题 👍在 Android Studio 的它们底层行为完全不同。
2026-03-03 16:37:40
997
原创 ComponentActivity与AppCompatActivity 功能介绍
ComponentActivity是Jetpack架构的基础Activity,为Jetpack组件提供运行环境。它解决了传统Activity功能不足的问题,提供了生命周期感知、ViewModel管理、状态保存、结果回调等现代能力。ComponentActivity实现了多个关键接口,包括LifecycleOwner、ViewModelStoreOwner等,支持LiveData、协程、Fragment等功能。AndroidX将其从core库拆分到activity库,实现模块化架构,降低耦合。目前推荐使用an
2026-03-01 13:36:53
1144
原创 Github数据分析
GitStar Ranking 是一个对 GitHub 用户、组织和仓库按 Star 数量进行排序的网站,提供各类排行榜单,方便开发者发现热门项目和优质开发者。
2026-02-28 09:50:58
160
原创 仅用于编译的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
789
原创 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
390
原创 kotlin魔法runCatching
摘要:Kotlin的runCatching提供了一种简洁的方式来处理可能抛出异常的代码块,它返回一个Result对象。相比传统的try/catch,runCatching可以通过链式调用更优雅地处理异常情况,如使用getOrNull()在异常时返回null,或getOrDefault()返回默认值。Result类类似于Java的Optional,提供了onSuccess和onFailure等方法进行更灵活的操作。这种方法简化了异常处理代码,使开发者可以专注于业务逻辑。
2026-01-27 10:26:16
214
sokit-1.3-win32-chs(中文版)
2023-02-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅