- 博客(134)
- 资源 (5)
- 收藏
- 关注
原创 flow的操作符号
方法去除重复方式场景举例过滤连续相同的值基础类型、data class根据字段值过滤对象只按id去重(自定义)全局唯一去重不管是否连续,都过滤重复distinctUntilChanged是提供新值和旧值给你自己比较的问:flow是一个冷流,也没有存储,他怎么判断这个发送的值是否和上次的相同。
2025-05-21 10:48:19
158
原创 Kotlin一些迷惑的语法
和如何写法是一样的,因为编译成java的时候,参数中是带有当前的对象的。疑惑点:为什么传入的方法是无参数的,但是为什么调用的时候传入值?
2025-05-20 13:57:04
371
原创 kotlin-协程(什么是一个协程)
可以也行,但不是全部,job只是管理了协程流程相关的功能,比如开启结束等,但是像协程的名字等是没有的。CoroutineScope是信息最多的,包含可以获取协程的调度器,job等,以及调用launch 和 async去启动一个新的协程,而。job.join() //当前的协程阻塞,等待job的协程结束后,再执行当前协程的代码。// ,的时候得使用job.start方法才会启动协程,才会调用block的代码。job.children //子协程的job对象。job.parent //父协程的job对象。
2025-05-12 09:42:08
318
原创 Flow原理
因为我们是使用flow方法返回的SafeFlow对象去调用的,所以我们看下SafeFlow的collect方法。SafeFlow是继承AbstractFlow的类,所以我们看这个类就行。接下来我们分析下collect方法。可以看见是一个方法,返回的是一个SafeFlow对象,然后把我们传入。再接着查看collectSafely方法,发现调用到了我们传入的闭包。SafeFlow的collectSafely方法才行。我们先看创建flow的方法。然后,这个对象提供一个方法。的传入到了这个对象中。
2025-04-28 23:28:35
604
原创 Retrofit的使用步骤
7. 配置 OkHttp 拦截器(可选),设置拦截器是通过设置自定义的。4. 创建 Retrofit 实例。5. 创建 API Service。如果需要日志输出,可以添加。3. 定义 API 接口。
2025-04-01 15:49:35
224
原创 Android studio无法查看源码
想要查看 sdk的源码的时候,发现没有办法查看,发现的是一个 class文件,而不是java文件。1、检查对应版本SDK API Sources是否下载。如果没有下载,下载下就可以。
2025-03-20 13:55:46
353
原创 android 快速定位当前页面
(3)查看当前栈顶的Activity的Fragment :adb shell dumpsys activity your.package.name。查看当前栈顶的Activity :adb shell dumpsys activity |查看帮助:adb shell dumpsys activity -h。
2025-02-21 16:51:26
760
原创 Gradle JDK 和项目JDK的区别
有什么区别呢?当你在build.gradle文件中设置sourceCompatibility和targetCompatibility为JavaVersion.VERSION_1_8时,你告诉编译器,你的Java源代码是按照Java 8的语法和特性来编写的,并且你希望编译出来的字节码是与Java 8兼容的。这就意味着你的应用可以在运行Java 8或更高版本的JVM上运行。
2025-02-17 14:51:57
217
原创 android 网络安全配置
允许明文流量:即允许通过 HTTP 协议进行网络通信(不加密)。信任的证书源:信任 Android 系统自带的证书以及用户自己安装的证书。
2025-02-14 18:11:42
980
原创 android 的抓包工具
https://www.charlesproxy.com/latest-release/download.do charles
2025-02-14 10:21:49
568
原创 android的gradle
的一部分,它们的作用是让项目可以使用 Gradle 而无需提前在系统中安装 Gradle。这里有个gradlew很有用,因为这个可以在窗口中运行gradlew脚本。./gradlew -v ---查看当前的gradle版本信息。
2025-01-26 16:59:19
619
原创 Android的签名
是指通过哈希函数对任意长度的数据(二进制数据源)进行处理后生成的固定长度的输出值(哈希值)。消息摘要的主要目的是确保数据的完整性,即用来验证数据在传输或存储过程中是否被篡改。.JKS 是 Java KeyStore 的缩写,是 Java 平台下的一种密钥存储格式,里面存有公钥和私钥。还有android的打包流程。
2025-01-26 16:27:36
282
原创 android 的aab包
AAB (Android App Bundle) 是 Google 推出的新一代 Android 应用发布格式,用于取代传统的 APK 格式。AAB 的全称是 Android App Bundle,扩展名为 ,它并不是直接可以安装的文件,而是用于上传到 Google Play 的发布包。1. AAB 的核心特性动态交付 (Dynamic Delivery):更小的下载包:3. AAB 的工作原理当你上传 文件到 Google Play 后,Google Play 会对其进行处理:分拆资源和代码:动态生成适
2025-01-26 11:14:36
1780
原创 android studio生成jsk
文件(Java KeyStore)是 Android 开发中用于签名 APK 的密钥库文件。它包含用于签名的私钥和公钥,并保护其不被未授权使用。如何查看jks的信息呢?窗口中输入命令,前提是配置好java的环境变量。keytool -list -v -keystore 你的jks路径。红色的名字是自己写的,记得加后缀,标识的都是必须项。或者Android studio生成。keytool是jdk的工具。
2025-01-24 11:10:45
871
原创 BuildConfig
Gradle 插件 7.0.0 开始,出于性能优化的考虑,默认情况下不再自动生成 BuildConfig 类。这是为了加快构建速度,特别是在大型项目中。所以如果我们需要主动生成。编译完buildConfig就会生成对应的信息。类,有几种方法可以重新启用它。如果需要配置一些信息。
2025-01-22 15:05:55
266
原创 The maximum compatible Gradle JVM version is 17.
这句话 “The maximum compatible Gradle JVM version is 17” 表明在你的项目构建环境中,Gradle 所能兼容的最高 Java 虚拟机(JVM)版本是 17。Gradle 本身是用 Java 和 Kotlin 编写的构建工具,它运行在 JVM 上。编写构建脚本,Gradle 都需要一个 JVM 来解析和执行这些脚本。(传统的 Gradle 构建脚本语言)还是。gradle的编译为什么会用到java呢?这个时候修改下本地的jdk版本就行。
2025-01-22 10:41:40
1109
原创 You need to use a Theme.AppCompat theme (or descendant) with this activity.
说明你的 Activity 正在使用需要支持库主题(如。)的组件,但你没有为它指定基于。
2025-01-21 19:12:53
1468
原创 getResources().getDimension引起的问题
getDimension()会自动把数值解析成xp单位,因为view的宽高本来接受的就是xp,所以不会变化,但是 setTextSize接受的单位默认是sp。相当于getDimension()把sp转成xp,会放大,setTextSize又会将转换后的值变成xp,又放大了。想着应该没问题吧,结果动态代设置的字体比xml中设置的大很多,而宽高确没变化。
2024-07-05 17:59:59
286
原创 Dialog的知识点
Dialog仅在在第一次启动时候会执行onCreate()方法(之后无论该Dialog执行Dismiss(),cancel(),stop(),Dialog都不会再执行onCreate()方法)。原文链接:https://blog.youkuaiyun.com/qizewei123/article/details/78232752。cancel() 是在点击BACK按钮或者Dialog外部时触发,然后依次执行onDismiss() 和 stop()。再次点击显示按钮,然后执行Dialog.dismiss() 方法。
2024-07-04 16:02:11
318
原创 android的surface
Surface 是Android系统中真正的画布,Activity上的所有UI都是在Surface 上完成绘制的,每一个Surface 对象都在SurfaceFlinger中有对应的图层(Layer),SurfaceFlinger 负责把这些Layer按需混合处理后输出到Frame Buffer中,再由Display设备(屏幕或显示器)把Frame Buffer里的数据呈现到屏幕上。在ViewRootImpl调用view的draw方法之前创建的。canvas怎么来的,canvas是由surface创建的。
2024-06-19 18:32:32
521
原创 HarmonyOS-5(style样式)
假如你要用textview的一些特有属性得用,这个有一个区别就是 @Extend装饰器只能用于全局的方法,不能用于组件内方法。但是style装饰器封装的属性只能是公共的属性。
2024-04-17 16:54:50
281
原创 Scrollview的 一些简单介绍
与ScrollView相比,NestedScrollView的主要区别是增加了对嵌套滚动的支持。insideOverlay Overlay(覆盖的意思)在Scrollview内容的最右边, 不会改变改变padding的大小,浮在Scrollview内容view的上面,会遮挡内容view -这是Scrollview的默认的。insideInset 将滚动条插入到Scrollview内容的view的后面,会增大Scrollview的padding值的大小,但是会压缩Scrollview内容view的大小。
2024-02-21 10:38:31
1096
原创 待处理的研究内容
requestLayout会重新测量布局,走了ViewRoot的一系列方法,也会走。invalidate方法不会,因为不会走检测线程的方法。ViewRootImp的requestLayout()android之所以不能在子线程中更新Ui是因为。android是不是可以在子线程中更新UI。android的openGL 的学习。
2024-02-18 11:10:10
585
原创 Dialog被软键盘遮挡
有时候我们需要在dialog中有EditText,假如手机是横屏的话,软键盘可能会全屏显示,遮挡了整个界面,这个时候无论是设置。onEvaluateFullscreenMode()返回值会false即可。其实Editext为我们提供了解决方法的。
2023-08-02 16:27:31
938
原创 LiveData不走回调
新项目使用的LiveData这个框架,有一天发现LiveData注册的监听回调,永远只走一次,后面的都不走了,这个很奇怪。最后发现是try catch引起的。所以现在问题就很明确了,就是因为调用方法的 时候奔溃了,导致直接走了catch,后面的代码没有执行完,从而导致。debug后发现只要第一次奔溃后,后面永远都不会走这个回调。如下方法中标记所示,只有在整个方法执行完才会置为false。我们查看LiveData中分发事件的方法。并且debug在如下标记的位置,发现。我的代码大概如下所示:方法中使用了。
2023-03-22 16:53:22
1492
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人