自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

HugMua的博客

个人学习笔记总结

  • 博客(208)
  • 收藏
  • 关注

原创 设计模式 - 单例模式 Singleton Pattern

确保一个类只有一个实例,并提供全局访问点,该类负责创建自身对象,同时保证仅单个对象被创建,且可直接访问(无需实例化)。

2025-11-19 23:33:24 169

原创 Android Studio - 使用 BuildConfig

可以定义全局变量,根据 debug 或 release 环境分别拿到不同的值。

2025-11-16 22:24:55 181

原创 网络 - 监听与优化

Android监测网络连接状态主要依赖ConnectivityManager,分为主动查询和被动监听两种方式,其中NetworkCallback(Android 5.0+)是推荐的监听方式,支持更细粒度的网络变化回调。Android 10(API 29)后,NetworkInfo(如getType())被标记为过时,推荐使用NetworkCapabilities判断网络类型,支持区分Wi-Fi、4G、5G等。通过注册NetworkCallback,监听网络连接/断开、网络类型变化等事件,无需频繁查询。

2025-11-06 05:00:03 550

原创 网络 - 缓存

当某些网络访问获取的内容不是每次都变的,而是短时间不变的(每月榜单)或长时间不变的(歌曲的信息),每次访问都联网获取的话,可能响应慢,不支持离线浏览,浪费用户和公司的流量费用和带宽占用。因此将已请求的内容存储在本地(内存或磁盘)用于后续复用。

2025-11-06 03:33:53 995

原创 Compose - 使用 Lifecycle

LifecycleEventEffect 可自由指定需要监听的生命周期,LifecycleStartEffect 和 LifecycleResumeEffect 监听特定声明周期,还可以指定 key 来再次触发,必须回调指定方法可用来清理资源。

2025-11-02 00:55:51 328

原创 Jetpack - Media3(ExoPlayer)

将起始索引 fromIndex(包含) 到目标索引 toIndex(不包含) 之间的条目,移动到目标索引newIndex。fromIndex超出范围请求会被忽略,toIndex超出范围则一直截取到尾部,newIndex超出截取后剩余的范围则为列表尾部。播放列表中的项之间可以无缝切换,无格式相同要求,甚至无媒体类型相同要求,也就是播放列表可以同时包含图片、视频、音频。调整速率(不改变音调),参数 speed 必须大于 0,1.0 为正常速率,2.0 为两倍速,0.5 为半速。

2025-10-27 04:01:12 1022

原创 Jepack - DataStore

在 top-level 使用 preferencesDataStore() 提供的属性委托来获取 DataStore<Preferences> 实例,扩展属性给到 Context 因为创建实例会用到上下文,只提供 getValue() 因此属性是val。注意 preferencesDataStore() 不能保证对象单例,如果在同一进程中为给定文件创建多个。存储位置:/data/user/0/包名/files/datastore/文件后缀:preferences_pb。实例,在读取或更新数据时将抛出。

2025-10-23 03:17:52 837

原创 Compose - 使用 CameraX

【代码】Compose - 使用 CameraX。

2025-10-18 02:20:42 144

原创 Compose 可组合项 - 轮播图 Carousel

多浏览轮播item宽度逐渐变小,可以单独设置最小那个item的最小/最大宽度。有吸附效果,容器左边界不会部分显示item。非容器化轮播item宽度固定。没有吸附效果,滑到哪里是哪里。

2025-09-24 01:41:36 924

原创 Compose 修饰符 - 外观(尺寸、样式、布局、行为)

通过链式调用串接API,因此顺序会影响最终结果(例如边距padding)。

2025-09-23 19:05:11 630

原创 Compose 修饰符 - 阴影

shadow() 会根据组件在屏幕位置呈现不同角度的光照阴影,可以设置阴影高度,更精细的自定义(如阴影扩散或半径等属性)使用另外两个。val offset: DpOffset, //沿 x 轴和 y 轴定位阴影的几何图形。从内容边界向内绘制阴影,由低变高。如果内边距不够,内容不是在阴影最高的那一圈内,重叠部分会显得割裂。实现阴影,传给 dropShadow() 或 innerShadow() 使用。在内容之上绘制,在其它内容(如背景)之后调用。

2025-09-20 03:40:48 779

原创 Compose - 使用 Coil

相比 Glide、Picasso 而言,Coil 更专注于 Compose 且它的代码使用 Kotlin。

2025-09-03 04:04:01 734

原创 Android - 资源类型 MINE Type

MINE(Multipurpose Internet Mail Extensions)最初是为了标识电子邮件附件的类型,在 HTML 中使用 content-type 属性表示,描述了文件类型的互联网标准。

2025-08-21 23:22:42 321

原创 Android - 统一资源标识符 Uri

URI(Uniform Resource Identifier)统一资源标识符,用于标识资源的字符串(如图片、网页、文件、应用等)。

2025-08-21 20:34:39 385

原创 Android 优化 - 日志 Log

下方代码,当日志开关设置为 false 时,对 message 的传参虽然会被丢弃,但还是会先执行得出该参数的代码。

2025-08-03 16:51:47 295

原创 Compose 适配 - 键鼠模式

不止触摸交互,在 ChromeOS 或外接键鼠的设备上,需要考虑焦点、悬停、右键等操作逻辑。

2025-07-24 23:47:59 277

原创 Compose 适配 - 折叠屏形态 FoldingFeature

/通过全局入口AppTheme获取更符合直觉,因此设为private> { null }//用于获取折叠屏信息/*** 判断折叠屏是不是桌面模式*//*** 判断折叠屏是不是图书模式*/) {.value???

2025-07-24 00:46:11 379

原创 Kotlin - 边界控制 coerceIn、coerceAtLeast、coerceAtMost

当需要对数值进行范围限制时,通常会用 if() else if() else,这样会写很多判断,使用 coerceXXX() 函数来简化,适用于实现了 Comparable 接口的对象。限制数值在给定范围之内,超出则返回边界值。确保值不小于指定最小值,小于则返回最小值。确保值不大于指定最大值,大于则返回最大值。

2025-06-16 18:49:25 662

原创 Jetpack - WorkManager

普通环境继承 Work,协程环境继承 CoroutineWorker。重写 doWork() 用于耗时任务,需要返回一个 Result 用于将任务结果通知给 WorkManager:success成功、failure失败、retry重试。

2025-04-27 12:03:00 267

原创 Compose 适配 - 显示空间 WindowSizeClasses(响应式排版 & 自适应布局)

传统根据屏幕大小和方向做适配的方式已不再适用,APP的显示方式还可能是:手机平板的分屏、ChormeOS的窗口可调整大小、折叠设备的屏幕形态切换等显示方式,因此需要根据可用显示空间做适配。

2025-04-11 23:34:14 1102

原创 Android Studio - 解决 Please Select Android SDK

点击 Run 后弹窗,图一位置出现图二提示。

2025-04-09 22:41:18 1926 1

原创 Android Studio - 解决gradle文件下载失败

C:\Users\user.gradle\wrapper\dists(这里的user是你自己的用户名)。

2025-02-15 17:11:27 702

原创 Kotlin - 先决条件 Preconditions

以下函数,一个参数的重载默认了异常信息,两个参数的重载可以自定义异常信息。条件必须满足,代码才会继续往下执行。

2024-08-21 17:52:36 372

原创 Kotlin - 链式调用处理返回的结果 Result

参考文章success( )failure( )public inline fun <T> success(value: T): Result<T> = Result(value)//成功时调用,来包装返回的值。public inline fun <T> failure(exception: Throwable): Result<T> = Result(createFailure(exception))//失败时调用,来包装返回的异常。.isSuccess.isFailurepublic val isSuc

2024-08-21 17:34:08 1696

原创 Jetpack - CameraX

CameraX 解决了由于碎片化问题在不同机型上保持一致性体验的麻烦, 只需要关心 API 调用,不需要对不同机型做适配。CameraX 把不同的功能,如 预览、拍照等功能封装成不同的 UseCase,这样就可以根据业务的需要,来绑定不同的 UseCase 来实现具体的功能。不同设备的摄像头支持的宽高比可能不同,使用 RATIO_DEFAULT 可以自动选择最适合当前设备的宽高比。:保持宽高比,可能会在顶部或左侧留出空白。:保持宽高比,可能会在上下或左右留出空白。:保持宽高比,可能会在底部或右侧留出空白。

2024-07-26 20:03:46 453

原创 Compose - 权限申请

不同版本中,权限状态(如PermissionState)中获取属性的方法不同,例如在“0.23.1”中,通过 PermissionState.hasPermission 属性拿到是否通过的 Boolean 值,在“0.35.0-alpha”中,通过 PermissionState.status.isGranted 属性拿到。

2024-06-18 17:37:04 1925

原创 Compose 可组合项 - 日期选择 DatePicker、DatePickerDialog

onDismissRequest: () -> Unit, //关闭对话框回调confirmButton: @Composable () -> Unit, //确认按钮= null, //取消按钮properties: DialogProperties = DialogProperties(usePlatformDefaultWidth = false), //对话框配置,详见。

2024-06-17 17:43:24 1763

原创 Compose 可组合项 - 输入框 TextField、OutlinedTextField、BasicTextField

innerTextField 是输入框的实现,必须并且也只能调用一次这个函数,在 decorationBox 中通过自定义 innerTextField 的调用位置等方式实现自定义自己需要的文本框的目的。Sentences //当输入英文时候,将每个字母的第一个字符大写。Words //当输入英文的时候,将每个字母的第一个字符小写。Characters //将所有的字符大写。代码可设置的内容同 TextField 一样。None //不自动大小写。

2024-06-17 16:40:34 2225

原创 Compose 可组合项 - 抽屉式导航栏 NavigationDrawer

colors: NavigationDrawerItemColors = NavigationDrawerItemDefaults.colors(), //颜色。shape: Shape = NavigationDrawerTokens.ActiveIndicatorShape.toShape(), //形状。label: @Composable () -> Unit, //名称。onClick: () -> Unit, //点击回调。

2024-06-17 16:16:20 1436

原创 Compose 动画 - 共享元素过渡动画 SharedTransitionLayout

共享元素过渡是一种在内容之间具有一致的可组合项之间的无缝过渡方式。它们通常用于导航,当用户在这些屏幕之间导航时,可以直观地将不同的屏幕连接起来。结合 AnimatedContent() 或 AnimatedVisibility() 使用,将内容变化的动画交由系统处理。

2024-05-20 17:35:21 1218

原创 Compose 可组合项 - 一些自用控件的功能实现

针对的是给控件添加点击功能的场景(如Text),通过 Modifier 扩展函数实现。

2024-04-18 17:42:30 544 1

原创 Kotlin - 时间 Duration

用于表示时间度量,简化了时间单位的换算、计算时间差、操作间隔、比较等场景。

2024-04-10 16:44:40 1482

原创 优化 - 数组的查找

【代码】优化 - 数组的查找。

2024-03-23 03:59:08 419

原创 优化 - 排序算法

从左往右比较相邻的两个元素,右比左小就换位,这样最大值就出现在了右边最后一个元素上,再从左边第一个元素开始往右比较到倒数第二个元素,如此重复...

2024-03-23 03:40:08 328

原创 优化 - 数据结构

数据结构:数据存储在内存中的顺序和位置关系,选择合适的数据结构能提高内存的利用率。

2024-03-21 03:17:48 518 2

原创 Java - 数组 Array

数组长度不可改变,在处理固定大小数据的时候性能更好,有增删需求推荐使用 ArrayList,否则需要遍历旧数组对元素进行操作后存储到新数组中,或者遍历旧数组对目标元素位置后面的元素索引+1或-1即整体向前或向后移动1位。内循环一次,最值出现在尾部索引位置。有N个元素排序,外循环 N-1 次,内循环 N-i-1 次。适用于数组中元素数量较大时,但必须保证元素是排好序的(升序、降序)。从头到尾遍历,返回值在数组中第一次出现的位置(即使有相同的元素)。内循环一次,最值出现在头部索引位置。

2024-03-20 22:32:14 598

原创 Android - AIDL

定义接口声明功能,手动创建的是 .aidl 文件,调用 IDE 的 rebuild 生成 .java 文件。Module右键→New→AIDL→AIDL File(如果不可选,在 module 的 build.gradle 的 节点下的 节点中添加 aidl true)。在创建的接口中声明抽象方法(IDE生成的默认方法可以删掉,只能用 Java 语法写)。

2024-03-19 00:22:15 1384

原创 网络 - HttpURLConnection

是Android原生的HTTP请求工具类。Android 6.0(API 23)后HttpClient被标记为过时。

2024-02-24 16:10:49 281

原创 网络 - HTTP 协议

Cache-Control是服务器返回的 Response 中的 Header 所包含的信息,目的是告诉客户端从本地读取缓存还是从网络获取。(expires等同于Cache-Control,不过是 Http 1.0 的内容)

2024-02-24 16:07:11 513

原创 网络 - OkHttp

设置好Cache后,同一个地址访问两次打印Log:第一次访问的response.networkResponse( )有内容(来自网络)而response.cacheResponse( ) = null;第二次访问相反,response.cacheResponse( )有内容(来自缓存)而response.networkResponse( ) = null。当某些网络访问获取的内容是短时间不变的(每月榜单)或长时间不变的(歌曲的信息),每次访问都联网获取数据的话,会重复浪费用户和公司的流量费用和带宽占用。

2024-02-24 16:05:12 911

空空如也

空空如也

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

TA关注的人

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