自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Ung8023

走在一条路上

  • 博客(89)
  • 问答 (2)
  • 收藏
  • 关注

原创 新版AndroidStudio的Gradle窗口显示task list not built 问题解决

在使用新版AndroidStudio时,会出现,的问题。如果你记得task的名字,当然可以 直接通过命令或者直接执行即可,但是若是记不住,还是把这个任务构建处理比较好用。

2024-03-08 12:48:21 771 1

原创 使用KMP(kotlin多平台)开发Compose,如何打包成可执行文件?exe、DMG……

上一次的分享中,我分享了,如何在windows平台上直接通过IDE运行compose。使用的方式是:双击ctrl,然后,执行gradle run有朋友问,我是能够执行了,但是这毕竟是调试方式,它还不是一个可以分享给别人的可执行文件呀,我写一个程序,只能在自己电脑上运行,那没啥意义呀。那今天我分享一下,如果将compose的代码,打包成一个Windows平台的可执行文件(其他平台同理,看一下就知道)。

2024-03-05 12:03:50 1293

原创 AndroidStudio如何安装其他版本JDK

可以直接安装图中的指示,找到对应的选项卡,下载,或者添加JDK即可。

2024-03-05 11:55:33 352

原创 使用KMP(kotlin多平台)在windows上出现:Cannot locate tasks that match ‘:composeApp:compileJava‘ as task ‘compil

kotlin 多平台在windows上运行失败解决方案

2024-01-26 10:59:38 566 7

原创 数据结构与算法:插入排序

arr[i]和arr[i-1]比,若 arr[i-1] 大于arr[i],交换两个值。arr[0]和arr[1]对比,若arr[0] 大于 arr[1] ,交换两个值,arr[1]和arr[0]再比,arr[0] 大于 arr[1] ,交换两个值。arr[1]和arr[0]再比,arr[0] 大于 arr[1] ,交换两个值。arr[2]和arr[1]比,若 arr[1] 大于arr[2],交换两个值。arr[2]和arr[1]比,若 arr[1] 大于arr[2],交换两个值。时间复杂度 O(n²)

2023-12-14 00:51:07 94

原创 数据结构与算法:冒泡排序

arr[i] 和 arr[i +1]对比,若arr[i]大于 arr[i+1],交换两个值。arr[n-2]和arr[n-1]对比,若arr[n-2]大于arr[n-2],交换两个值。arr[0] 和 arr[1] 对比,若arr[0] 大于 arr[1], 交换两个值。arr[1] 和 arr[2]对比,若arr[1] 大于 arr[2], 交换两个值。arr[2] 和 arr[3]对比,若arr[2]大于 arr[3],交换两个值。确定出 arr[1]的值,同时确定了arr[0]的值。

2023-12-14 00:49:42 73

原创 数据结构与算法:选择排序

每次都要在剩余未排序的集合中,找到那个最小(或者最大)的值,放到当前位置。从当前位置到最后,找出最小(或者最大)值,放在当前位置,位置后移。第i次:找到 i ~ n-1范围内最小值,放在i 位置。第一次:找到0 ~ n-1范围内的最小值,放在0位置。第二次:找到1 ~ n-1范围内最小值,放在1位置。最小或者最大,影响的是降序还升序。额外空间复杂度 O(1)时间复杂度 O(n²)

2023-12-14 00:48:24 120

原创 数据结构与算法:衡量算法好坏的指标——复杂度

复杂度,用来分析算法执行过程中,所需要的资源。时间复杂度是衡量所需要的时间。空间复杂度,是衡量所需要的(内存)空间。

2023-12-14 00:46:15 221

原创 MAC电脑连接外接显示屏,颜色显示有问题,又粉、紫色蒙版,问题处理(1)

买了一个显示器,想给mac做分屏使用,结果连上之后发现,整个屏幕像是被蒙上了一层紫色的蒙版。

2023-11-17 10:54:22 3029

原创 在项目中增加网络加载需要考虑什么?

一般文件校验失败了,也就证明当前缓存是有问题的,或者中间被人篡改了。这时根据当前文件是缓存还是直接下载的文件,去做对应的处理。如果是缓存文件,会直接删除重新下载,如果非缓存文件,可能提示出错等。既然是缓存,就需要考虑缓存的清理策略。对于磁盘缓存来说,如果你的项目中已经存在磁盘缓存,可能需要将当前的缓存文件类型,纳入到原来的缓存管理中,进行统一处理。我们熟知的缓存策略可能就是Glide中的图片三级缓存策略了。网络加载的第一步肯定是下载,那么选择一个合适的下载器是十分重要的,这个下载器最好支持什么功能?

2023-08-12 23:26:10 243

原创 腾讯出品Pag动画框架在Android端的使用-网络Pag加载

在我们可以通过assets的方式加在pag文件之后,我们会考虑下一个问题,可不可以用Pag框架加载网络文件?为什么会有这样的问题出现,或者说网络方式加载可以解决什么问题?APK 体积增加问题当一个项目规模比较大的时候,会做很多优化工作,其中「APK瘦身」便是一项优化点。通过网络的方式加载可以减少内置文件,从而降低APK大小。热更新问题我们有时候是有这样的需求的,线上更改动画效果,通过网络方式便可以做到。新的功能或者组件上线,需要更新客户端问题。

2023-08-12 23:23:41 952

原创 腾讯出品Pag动画框架在Android端的使用-初级

Pag动画框架作为一个第三方框架,它的优缺点与Lottie是相似,此处不过多赘述。如果你们的项目中打算用了,肯定是经过了一定的调研的。Pag动画框架分几个版本,有免费的有收费的。我们目前用的社区免费版,只用来展示Pag动画。高级的版本可以播放视频、声音等,酌情选取。

2023-08-12 23:21:36 914

原创 非原生动画框架在Android端的使用

在Android平台上,除了我们熟知的属性动画(Animator),View动画(Animation),后面出的Transition动画,还有其他第三方出的动画库可以供我们使用:Lottie(Airbnb)、Pag(腾讯)与Lottie相比,Pag的优势在于,只需要一个pag文件即可(整体打包)。我们的项目中用过lottie 动画,现在在逐步使用Pag动画。文档:http://airbnb.io/lottie/#/方便云控,可以通过下载动画文件,更新动画。有一定的可复用性,通过替换文件实现。

2023-08-12 23:15:18 118

原创 Gradle build 失败后提示.lock文件,解决办法

在Gradle build失败之后时,有时候强制关闭AndroidStudio,再次打开build时,会提示各种.lock 文件问题,删除了一个还有下一个,而且路径不一样。一般情况下是这两个文件夹下的lockfile影响继续build。

2023-07-28 15:21:03 579

原创 让你的.sh脚本文件可以执行

新创建的 .sh 文件执行时,会报错,怎么办?其实是因为这个文件还没有成为真正的可执行文件,会报错。

2023-07-28 15:14:52 68

原创 Android TextView 展示特殊字符高度变高问题解决

在我们的项目中,展示文字是很常见的需求,但是在线上展示中发现,有些信息是特殊字符展示的,而且这些字符的高度会导致TextView的高度变高(与正常字符比)。效果如下:很明显,带特殊字符的高度,会非常高!

2023-06-27 21:42:20 837

原创 PAGFile手动设置速度失效问题处理

变速播放:首先设置 PAGFile.setTimeStretchMode(PAGTimeStretchMode.Scale),然后通过 PAGFile.setDuration() 接口设置你想变速后播放的时长即可,设置比原始更长时间是慢速播放,设置更短时间是快速播放。举例:一个8s长的pag文件需要循环播放3~6s,将PAGFile添加到PAGComposition后,设置PAGFile的startTime为-3000000,duration为6000000。原运动速度为1s总时长,想改为2s。

2023-06-08 12:00:29 252

原创 Glide预加载图片preload失效问题修复!

我在preload的时候,没有传入宽高,默认按原图取,走的api是不带分辨率path 的。而当使用的地方传入了imageView,它会根据imageView的宽高,请求对应分辨率的API,导致转换后的key变了,相当于我请求的虽然是同一个地址,但是转换成了两个。结果发现,并没有想象中的预加载效果,它貌似还是走的网络加载。为了提高用户体验,想要先下载图片,然后下载完成之后,再对图片进行展示,这样用户就不必看到加载图片时的空白状态。最终发现,是因为生成的key不一样,怎么会不一样呢,我明明获取的是同一张图片!

2023-05-25 15:01:35 1016

原创 Android事件分发汇总贴

Android事件分发上是从触摸板硬件层,一直传递到当前处理的View的过程。期间涉及到跨进程通信,主线程Handler处理消息,Window传递事件,Activity传递事件等等等等。学习事件分发,让我有能力面对复杂状态下,使控件有正确的行为。之前已经写好了3篇文章,从流程,到源码分析,到实际案例演示。希望你看过之后也有帮助,可以在评论区与我探讨遇到的各种情况哦。

2023-04-03 16:58:23 69

原创 Andorid 事件分发机制案例实操与解析

根据问题的前提,我们知道这是两个RecyclerView重叠摆放的问题导致的,当然我们可以自定义ViewGroup,重新定义两个View的摆放规则,但是那不在我们本次讨论范围内,我们只考虑当前的实现方案,如何最终实现这个功能。Android 的触摸事件,是从屏幕硬件触发,最终到达目前正在展示的Activity的,至于这期间如何传递的,此处不做讨论,我们讨论的起点,从Activity接收到触摸事件开始。事件传递相关的流程与 源码分析在上面的文档中已经看到了,接下来,我们来实现一下,文章开头提到的实现目标。

2023-04-03 16:50:52 492

原创 Android 事件传递相关流程图

之前从来没有总结过Android事件传递的流程图,此处,绘制一下简版Android事件传递流程图,方便理解事件传递的过程。

2023-04-03 14:44:54 157

原创 Android 事件分发源码解析(基于API31)

View类型的组件,接收到一个事件,是用dispatchTouchEvent开始执行。若自身设置了OnTouchListener,则执行OnTouchListener的onTouch方法。根据OnTouchListener的OnTouch方法的返回值判断是否执行自身的onTouchEvent方法onTouch 返回值为false,则执行自身的onTouchEvent方法onTouch返回值为true,直接返回结果。

2023-04-03 14:34:59 556

原创 RecyclerView 滚动条不显示

RecyclerView的滚动条不显示了,代码如下。给RecyclerView 加一个background即可。

2023-02-15 10:52:35 593

原创 Android Studio 升级之后Logcat变了个鬼样子

在AndroidStudio 升级到Dolphin之后,Logcat变了。恢复到原来状态在下方。这是新增加的实验性功能,不过我感觉不如原来的好用,把前边的✅去掉就好了。

2023-02-10 15:34:52 450

原创 切换Fragment,RecyclerView滑动一下

在四个tab中,其中一个Tab下包含了一个横向的RecyclerView,每次切换到该Tab时,RecyclerView会滑动一下。只在三星 Android 8.0 上复现。

2023-01-17 10:37:16 361

原创 Serializable引起的崩溃NotSerializableException

此类中还调用了其他的类对象(也就是上文中的VipInfo),调用的类对象必须一并实现Serializable。在Android中使用时,我将它作为一个参数,通过Bundle传递给Fragment,但是在序列化时报错了。

2022-12-28 10:29:08 319

原创 Kotlin调用Java代码时引起空指针异常,要怎么避免?

在Android项目中,经常会出现Kotlin 代码调用Java代码的情况,而在Kotlin编译器中,有这样一个默认的规定,如果Java中的代码被Nullable标记才认为是可控类型,否则, 如果你不指定为可空类型,利用类型推断会直接断定为非空类型。在Java里边最麻烦的便是空指针异常,而即使转到了Kotlin,当调用Java 代码时,仍然会存在这样的问题。注释,包括Android框架中的代码,也不是所有的地方都加了该注释,这样不利于Kotlin编译器进行类型推断,当没被。

2022-11-25 16:54:38 1006

原创 Android 通过ContentResolver添加CalendarEvent,删除后在某些机型上依然存在问题

App添加日历提醒功能,添加到系统日历中,网上有很多例子,可以参考,在我的测试机上,点击开关时,去添加事件(同时添加提醒时间),点击关闭开关时,去删除事件(同时删除提醒)。在某些机型上,即使删除了事件,还是能查询得到事件,但相关提醒已经删除了。在判断事件是否存在时,同时判断,是否已经删除~~开关状态通过 判断事件是否存在来判断。projection中 添加。在查询的实体中,添加。

2022-09-19 15:14:23 520

原创 Android系统悬浮球开发,在Android12上不显示的问题排查与处理。

Android悬浮窗,横竖屏显示有问题

2022-08-08 20:21:20 3031

原创 「“xxxx“正在运行,可能导致系统卡顿,降低待机时间,点按关闭」处理

在Notification中添加。

2022-07-22 16:29:26 508

原创 None of the following candidates is applicable because of a receiver type mismatch

Unresolved ReferenceNone of the following candidates is applicable because of a receiver type mismatch:* internal val File.root: File defined in kotlin.io

2022-06-30 15:51:40 3291 1

原创 Java中子类继承父类,父类中定义定义了抽象方法,子类在实现时,给子类变量赋值,执行构造后,变量值恢复成默认值

定义了一个抽象类()如下,目的是提供通用接口,在创建时会调用initData方法。2、创建实现类3、调试并验证按照我的预期,结果应该是:但是结果却是:表现出来的现象是,代码执行完init赋值之后,又被赋值回初始值了。背景就上面的问题了,通过打断点等等一系列调试之后,发现,在子类执行完父类的构造方法之后,又将自己的属性赋值了。于是推测,是子类属性赋值与父类构造方法的执行顺序导致的问题出现:我发现,在invokespecial处是执行父类构造方法,执行之后,果然在下面又对自己的属性赋值了初始值。既

2022-06-13 12:14:28 1354

原创 MotionLayout切割子View

问题描述使用MotionLayout,高度设置为wrap_content, 增加padding,内部一个子View为TextView,发现先试试TextView下半部分被切割!源码<?xml version="1.0" encoding="utf-8"?><androidx.constraintlayout.motion.widget.MotionLayout xmlns:android="http://schemas.android.com/apk/res/android"

2022-05-07 20:23:17 207

原创 「解决问题系」AndroidStudio出现代理错误‘‘you have JVM property “https.proxyHost“ set to “xxxxxx““

问题描述背景:系统 MAC OS前几天强制关闭了Charles,整个电脑不开启Charles无法上网,猜测是因为电脑中的代理问题,删除了代理之后上网正常,但是打开AS(AndroidStudio)Gradle无法下载包,并提示”you have JVM property “https.proxyHost” set to “xxxxxx”“控制台有如下输出,很明显是代理问题。”Caused by: org.apache.http.conn.HttpHostConnectException: Conne

2022-04-06 18:20:47 5555 1

原创 Java中的线程安全(2)之互斥同步的底层原理

Java中的线程安全(2)之互斥同步的底层原理本来在理解完互斥同步之后,应该开始扒一扒Lock的源码了,但是在真正进入源码阶段之前,需要先按照常人的思维去理解一下,如果,让我们自己实现一个这样的互斥同步,我们该如何实现互斥同步呢?互斥同步都需要什么呢?首先,我不是所有代码都需要互斥访问,那么在需要互斥访问的地方,我需要有一个标记,证明我的代码是要互斥访问的。其次,我需要一个标志位,来控制这段互斥访问的代码,是否正在被别的线程访问着。如果多个线程都想要访问这段代码,需要一定的机制,让非正在访问的线程

2022-04-06 11:04:58 2675

原创 Java中的线程安全(1)之互斥同步

Java中的线程安全(1)之互斥同步最近的一段时间见一直在研究线程安全的实现原理。以前知道Java给提供了synchronized关键字和JUC工具包可以用来实现线程安全访问。当时我就有一些疑问,为什么需要这样的工具?而以上的这两种方式分别是怎样保证的线程工具?总结下来就是这样两个问题:synchronized关键字是来解决什么问题?为什么它能解决这样的问题?有了synchronized为什么又出了Lock?1. synchronized关键字是来解决什么问题?在解释这个问题之前,先看

2022-03-17 20:04:10 693

原创 Handler到底是一个什么东东

Handler到底是一个什么东东作为一个Android开发工程师,Handler简直是必须要了解的东西。每次面试前,Handler都会悄悄地钻到耳边对我说:“嘿,哥们,老地方见!”果然,面试又问到了,而Handler又跑过来BB:“又被我难倒了吧!”(内心独白,老子就不信搞不定你!)于是便有了这篇解析。先来几个问题你了解Android的Handler机制吗?(我美不呲呵的说,那必须了解,一顿白话之后就有了下面的问题)你知道Handler在安卓framework中有哪些应用吗?你知道Hand

2022-02-17 19:53:49 2930

原创 Flutter TextField 设置可输入多行

主需要在maxLines中传递null即可TextField( // 传递null maxLines: null,),

2021-12-28 15:58:53 3115

原创 Flutter TextField输入文字时,若页面刷新,会导致光标位置发生变化。

问题描述前提:使用了Provider + 输入框的形式,当输入框的数据都输入时,提交按钮显示可用,否则不可点击。定义了一个Model用于保存是否可点击状态class StatusModel extends ChangNotifier { bool _canSubmit = false; bool get canSubmit = _canSubmit; set canSubmit(bool isCansubmit) { if (_canSubmit == isCansubmit) {

2021-12-28 11:34:03 2554

原创 Flutter 自己封装TextField,导致在列表中数据更新时,数据显示错乱问题。

需求有一个可输入的列表,输入列表会根据选择的选项不同,而输入不同内容。比如:选择 Vip客户时,需要输入:姓名,手机号,住址,Vip时长,付款方式选择普通用户时,需要输入:姓名,手机号,住址。实现使用ListView展示所有的输入项,因为输入框具有通用性。所以做了一个简单的封装。左侧为标题,右侧为输入内容,空内容时,展示hint提示请输入。大概是这样的样式-----------------------------客户类型 ⊙Vip ⊙普通------------

2021-12-28 11:33:03 1714

gradle lock文件清除

gradle lock文件清除 gradle lock文件清除 gradle lock文件清除 gradle lock文件清除 gradle lock文件清除 gradle lock文件清除 gradle lock文件清除 gradle lock文件清除 gradle lock文件清除 gradle lock文件清除 gradle lock文件清除 gradle lock文件清除 gradle lock文件清除 gradle lock文件清除 gradle lock文件清除 gradle lock文件清除 gradle lock文件清除 gradle lock文件清除 gradle lock文件清除 gradle lock文件清除 gradle lock文件清除 gradle lock文件清除 gradle lock文件清除 gradle lock文件清除 gradle lock文件清除 gradle lock文件清除 gradle lock文件清除 gradle lock文件清除 gradle lock文件清除 gradle lock文件清除 gradle lock文件清除

2023-07-28

清除gradle产生的 lock文件脚本

清除gradle产生的 lock文件脚本清除gradle产生的 lock文件脚本清除gradle产生的 lock文件脚本清除gradle产生的 lock文件脚本清除gradle产生的 lock文件脚本清除gradle产生的 lock文件脚本清除gradle产生的 lock文件脚本清除gradle产生的 lock文件脚本清除gradle产生的 lock文件脚本清除gradle产生的 lock文件脚本清除gradle产生的 lock文件脚本清除gradle产生的 lock文件脚本清除gradle产生的 lock文件脚本清除gradle产生的 lock文件脚本清除gradle产生的 lock文件脚本清除gradle产生的 lock文件脚本清除gradle产生的 lock文件脚本清除gradle产生的 lock文件脚本清除gradle产生的 lock文件脚本

2023-07-28

Chrome插件-M3U8 Downloader

1. 能直接下载M3U8视频的插件。自动标记成功的区块与失败的区块。 2. 如果想要把一些m3u8的视频保存到本地,可以直接通过这个插件下载。 3.当然,你需要先知道m3u8的地址才行,把地址copy过来即可。 4. 有条件的话直接去官方下载哦,毕竟官方也是免费的。 5. 导出来只是为了方便,无法访问Chrome商店的朋友使用。 6. 因为我是免费下载的,所以也免费提供出来。 官方网站:https://m3u8.dev/

2023-03-15

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

TA关注的人

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