- 博客(100)
- 问答 (1)
- 收藏
- 关注
原创 Android 从传统的XML转到Compose的变化:mutableStateOf、MutableStateFlow;有的使用by,有是用=,有的使用by remember是为什么?
总是被mutableStateOf、MutableStateFlow以及LiveData这些给搞混乱,这里我们就理清一下。如果大家学过传统的XML方式编写界面,然后又学习了Compose,就会发现,他们观察数据变化的对象用的不同了,以前我们用的是LiveData,但换成Compose以后,变成mutableStateOf,但又发现,有些用的是MutableStateFlow,并且,有时候他们赋值的时候,使用by,或者使用by remember,赋值的时候,有时候用=,有时候用value。
2025-04-04 09:53:27
519
原创 Android:如何看Github、Gitee上的项目提升自己的能力?一条龙服务,尤其是有了DeepSeek以后。
但,现在是AI时代,不仅支持输入的文字越来越多,并且还可以给你的代码增加注释,甚至你可以让他介绍里面为什么用到一些技术等等。比如:https://github.com/RicardoJiang/wanandroid-compose项目,教会你企业级项目应该如何写,MVI如何使用等等。比如:https://github.com/hegaojian/JetpackMvvm,整合了各种框架,你可以学习到如何做一个项目架构等。比如:https://github.com/caiyonglong/MusicLake。
2025-03-30 18:54:14
262
原创 Kotlin的扩展函数:给任何类添加你想要的功能,即使是自带类,第三方类。
• 扩展函数是 Kotlin 的“魔法工具”,用于无侵入性地增强类的功能。• 适用场景:工具函数、第三方类扩展、语义化封装。• 慎用场景:避免与类原有成员函数冲突,优先使用成员函数。一句话:给任何类添加你想要的功能。
2025-03-30 12:26:51
396
原创 Kotlin的委托(by,by lazy)是什么?在看源码的时候不知道他的作用是什么,为什么使用,那么你看看这篇文章。
想象你要出国旅游,但不会说英语,于是你找了个翻译帮你沟通。翻译就是你的“委托对象”,你“委托”翻译帮你处理语言问题。在 Kotlin 中,委托(Delegation) 就是这个道理:让一个对象(委托对象)代替另一个对象(被委托对象)完成某些任务。// 定义接口fun play()fun stop()// 普通播放器实现接口override fun play() { println("播放音乐") }override fun stop() { println("停止播放") }
2025-03-30 12:01:11
863
原创 为什么有些领导,智商非常的高,他总会看到一些我们看不到的东西;为什么明明是和你一起起步的人,现在却已经混到了管理层呢?而我们一直在基层不挪窝呢?
第一点是观察。第二点是不把事情想的很简单。
2025-03-28 21:56:37
82
原创 Android Compose是如何使用什么架构,多个Activity?还是Fragment?compose的ui又是如何卸载和挂载的呢?
最近在学习compose,先是找文章来学习,然后看github上面的源码来学习,最后再找视频来学习,然后再上github的项目学习,接着在根据项目的源码,自己删除再重新写一遍。一波三折。在学习的过程,我就有一个疑问,只有一个Activity,也没有看到Fragment呢,也没有看到更多的Fragment,我好奇,compose的生命周期是如何的,他的页面又是如何加载的,没看到onstart方法,或者页面停止的时候onstop方法。接下来,我们来解答一下这些疑惑。
2025-03-11 23:33:26
1160
原创 MotionLayout(二):MotionLayout是什么?MotionLayout调试技巧、KeyFrame关键帧等等
将ConstraintLayout布局转换为MotionLayout布局后,Android Studio会自动在xml文件夹生成一个对应的MotionScene文件,在该文件中我们可以定义动画的状态、过渡形式、关键帧的属性、和用户的交互方式等。
2025-02-26 22:52:05
621
原创 Android UI:为什么别人的UI看起来很有科技感,并且动画,交互非常的丝滑和顺畅,为什么呢?因为我们没有了解MotionLayout
为什么别人的UI看起来很有科技感,并且动画,交互非常的丝滑和顺畅,为什么呢?因为我们没有了解MotionLayout。MotionLayout 是 Android 中基于 ConstraintLayout 的高级布局容器,在 ConstraintLayout 2.0 版本中引入的。专门用于管理复杂的视图动画和过渡效果。它通过声明式 XML 或代码定义视图的运动路径、关键帧动画和交互行为,适用于实现高度动态的 UI 交互(如折叠效果、滑动抽屉、复杂转场动画等)。1、继承自 ConstraintLayout:完
2025-02-24 17:22:54
621
原创 RecyclerView(快速滚动版本):为什么别人的列表可以滚动的很远,而我们的不能呢?FastScrollRecyclerView
我们在使用应用的时候会发现,为什么别人的RecyclerView滑动可以滚动如此之快呢?而我们的确不行,听很多网友,群友,列表都是使用RecyclerView,这究竟是为什么呢?直到最近在Github上面找项目,看别人源码的时候,才发现,原来有一个这样的控件:FastScrollRecyclerView。
2025-02-23 20:36:24
283
原创 达到知行合一,要摒弃所有的欲望,会不会是个骗局呢?
那么什么叫知易行难呢?也就是知道一个道理很容易,但真正付诸实践却很难。其实在写这篇文章的时候,我就在想,我真能够把这个写好?写好的前提,也就是得我真的已经改变了知易行难,达到了知行合一。
2025-02-20 08:32:06
821
原创 App接入图表:MPAndroidChart,如何创建柱状图、双柱状图以及折线图
(3)BarData 是用于管理和组织柱状图(Bar Chart)中所有数据集(BarDataSet)的核心类。它负责将多个数据集整合在一起,并将其应用到图表中进行显示,可以设置柱子的宽度和间距。(2)BarDataSet 是什么:表示一组 BarEntry 的集合,代表柱状图中的一组柱子。(1)BarEntry是什么:表示柱状图中单个柱子的数据点。(2)配置X轴,也就是下方的轴,day1 day2 day3这些。(3)配置Y轴,注意,Y轴是有两个的,分左右两侧。整体的流程是差不多的,只不过控件换了。
2025-02-18 23:19:08
773
原创 App应用混淆:防止反编译、将App包体积降小。
App应用混淆是一种保护代码的技术,旨在增加反编译和逆向工程的难度,防止他人轻易理解或篡改代码逻辑。简单来说,就是把代码替换成a、b、c基本字母组成的代码,比如一个方法名为:test(),混淆后可能会被替换成a()。
2025-02-15 20:06:58
725
原创 Android小疑问记录:为什么androidstudio已经不建议在switch代码块里用R.id.xx作为判断条件了,为什么if可以?
在 Android Studio 中,不建议在switch代码块中使用R.id.xx作为判断条件,但允许在if-else中使用,原因主要与 Java 的语法规则和R.id.xx的特性有关。
2025-02-13 08:38:21
373
原创 别人的成功,让我们变得很焦虑,为什么呢?
明明什么都没做,却感觉到很累;出门在外,总是担心自己的缺点被别人发现;很多事情,不敢做,不敢说,不行动,改变不了;别人的成功,让我们变得很焦虑。如果你也遇到上述的问题,那么你可能要关注一下你的心理问题了,因为我也一样,在接近半年到一年的时间里,我都是这样的状态,直到逐个逐个问题解决以后,才得到了解脱。接下来这篇文章,会为你分享我在这个过程中的经历和解决方法。这篇文章会按照一下框架进行分享:我遇到了什么问题?本质是什么吗,为什么我们会遇到这些问题?
2025-01-27 17:34:50
879
原创 知行合一:解决有心无力的问题,解决知易行难的问题,知行合一并不意味着事事都要合一,而是....
沉溺于各种各样的享乐之中,最终一事无成,虚度了宝贵的时光。如果你也遇到了这些问题,那么这个视频的内容,能够给到你一些帮助。因为我也在这上面花了几年的时间,沉淀总结出来的一些提升认知和解决的方法。
2025-01-21 23:36:59
1056
原创 程序员修炼指南(一):学习基础原理;软件工程;设计模式;数据结构与算法;
当然,要学习的东西远远不止这些,虽然看起来过于基础,原理,但实际不是,只有这些才能支撑着我们走到更远。好了,这篇文章就到这里,我是前期后期,我们下一篇文章见。
2024-12-13 21:53:17
382
原创 数据结构与算法(一):如何在项目当中使用数据结构与算法?它是如何解决我们的一些问题的?
数据结构与算法:如何在项目当中使用数据结构与算法?它是如何解决我们的一些问题的?
2024-12-08 15:02:38
798
原创 HTTP 网络技术学习:缓存;为什么有时候出现问题要清除浏览器缓存?客户端缓存和服务端缓存是什么。
有时候网站出现问题,或者数据没有改变,通常客服或者售后会让我们刷新一下网页,或者关掉浏览器,或者清掉缓存再试试,然后就可以了,这是为什么呢?
2024-12-08 09:58:42
1240
原创 HTTP 网络技术学习:CDN,为什么我们使用第三方服务的时候需要购买CDN呢?为什么网络速度会慢呢?
首先,我们必须认识到光速虽然在真空中接近每秒30万公里,但在实际应用的电缆或光缆中,这一速度会降至大约三分之二,即20万公里每秒。这意味着,随着地理距离的增加,数据传输的延迟也会变得愈发显著。
2024-12-07 17:15:47
722
原创 Android 消息队列之MQTT的使用:物联网通讯,HTTP太重了,使用MQTT;断网重连、注册、订阅、发送数据和接受数据,实现双向通讯。
目录:问题MQTT是什么以及为什么使用如何使用:第一阶段、基础功能如何使用:第二阶段、增加断网重连如何使用:第三阶段、封装一、问题在开发的时候,我们一般都使用Http和后台进行通讯,比如我们是开发物联网的,设备会有很多数据需要频繁发给后台,使用Http来做这件事情,就感觉很重,比如会遇到如下这些问题:开发成本:需要后台创建接口,前台去请求。连接数过多:在HTTP协议中,每次请求都需要建立一个新的连接,这可能导致连接数过多,特别是在高并发场景下。对于自动售卖机来说,如果同时有大量的
2024-12-04 11:51:08
1508
原创 Android 还在使用LogCat打日志?XLog框架;日志打印到控制台,打印到文件中。
首先,System.out.println 是一个同步方法,每次调用都会导致 I/O 操作,比较耗时,频繁使用甚至会严重影响应用程序的性能,所以不建议在生产环境使用。日志是我们系统出现错误时,最快速有效的定位工具,没有日志给出的错误信息,遇到报错你就会一脸懵逼;而且日志还可以用来记录业务信息,比如记录用户执行的每个操作,不仅可以用于分析改进系统,同时在遇到非法操作时,也能很快找到凶手。好了,这篇文章就介绍到这里~,我是前期后期,如果你也有日志相关的经验分享,也可以在评论区讨论哦,我们下一篇文章再见。
2024-12-03 20:59:49
636
原创 Android 串口SerialPort:数据不连续的问题
比如本来数据是02 03 06 00 01 00 00 00 FF,02是头,FF是尾,所以我们只需要判断,如果收到了02,那么直到我收到FF,才算是完整的数据,不然的话,我就会使用StringBuild一直拼接,如果拼接到了一定的数据量,还是没有,那么就要报错清空了。在跟下位机通讯的时候,我发现有时候会出现数据没有回来的情况,打log发现是下位机返回的数据量太大了,导致还没有完全放到流里面,我们就取走了,这样,上位机获取的数据就是不完整的。
2024-12-01 20:31:08
261
原创 Android 工厂设计模式的使用:咖啡机,可以做拿铁,可以做美式等等。
上述,我们使用的是一种简单工厂设计模式。如果将来需要支持更多种类的纸币器或者需要对纸币器进行更复杂的配置,可以考虑使用工厂方法模式或抽象工厂模式。不过,对于当前的需求来说,简单工厂模式已经提供了足够的灵活性和可扩展性。产品具有明显的继承关系,且产品的类型不宜太多。所以的产品具有相同的方法和类似的属性,使用者不关心具体的类型,只希望传入合适的参数能返回合适的对象。
2024-11-20 23:12:09
981
原创 Android 如何写代码更少出现bug?借助IDE的检测代码质量插件来解决。
检查代码规范的话,直接使用 Alibaba Java Coding Guidelines。找 BUG 的话,使用 PMD、SonarLint 相互补充。
2024-11-07 18:00:00
843
原创 Android 策略设计模式的使用:使用设计模式,减少烂代码,让项目更好维护
在项目开发过程中,我们会对接很多种支付:国内(微信、支付宝),海外(日本的TakeMe、UnivaPay)等等,如果我们使用的是MVVM、或者MVP架构,那么这些逻辑都会在VM层或者P层。/*** 微信支付宝 获取二维码} /*** takeMe Pay 获取二维码} /*** univa Pay 获取二维码} /*** univa Pay 查询支付结果} /*** takeMe Pay 查询支付结果} }
2024-11-01 20:50:15
914
原创 Android 在github网站下载项目:各种很慢怎么办?比如gradle下载慢;访问github慢;依赖下载慢
大家好,我是前期后期,在网上冲浪的一名程序员。为什么要看这篇文章呢?问题是什么?我们在Github上面看到一些好的项目的时候,想下载下来研究学习一下。但经常遇到各种网络问题,下载速度问题,导致我们学习兴趣下降。所以今天就给大家分享这个过程中遇到的问题如何解决。
2024-10-27 10:16:15
849
原创 Android 从0搭建初始化MVVM项目框架(二):添加版本依赖管理、分包分模块、组件化Aroute
Android 从0搭建初始化MVVM项目框架(二):添加版本依赖管理、数据库、路由、分包分模块、组件化Aroute。
2024-10-22 19:51:32
1363
2
原创 Android 从0搭建初始化MVVM项目框架(一):如何搭建属于自己的项目框架?如何创建BaseActivity?如何整合viewbinding?如何整合网络框架?
使用MVVM架构进行搭建,使用Kotlin语言开发,整合网络框架OkHttp+Retorfit,依赖注入框架Hilt,数据库Room等等。当我们搭建了一个这样的框架后,以后我们开发项目可以直接拿来就用,省去了很多的开发时间。为什么明明github有了,我们还需要自己去做一个呢?一方面是为了学习,了解他的架构设计,如何整合其他框架,整合的过程中会遇到什么问题(我遇到最多的问题就是构建问题)。
2024-10-22 14:21:16
1844
原创 为什么说努力的作用被大大高估 ?我们应该这么做?打破我们对打工的认知!打破我们对努力的认知!打破我们对创新的认知!那么机会在哪里呢?为什么我们有新奇的点子,但是最后却不了了之了呢?
在现代经济中,工作的努力程度并没有那么重要。判断力更重要。在前进的过程中,方向比速度更重要。在每个岔路口选对方向,其重要程度要远远超过前进的努力程度。人生就是选择正确的方向,然后朝这个方向奋力前行。与埋头苦干相比,更重要的是理解和思考。没有思考,你就不会有出色的商业创意,也不可能做出正确的判断。我鼓励大家每周至少花一天时间来思考。一个倍感压力、案牍劳形、四处奔波、焦头烂额的人,是没有办法思考的。所以,一定要为思考挤出时间。
2024-10-11 23:59:45
400
原创 Android 如何实现远程网页控制售卖机出商品:RabbitMQ的对接,如何使用?如何断网重连?连接不上后台的MQ有哪些方面的原因
比如,我们想实现,通过一个网页去控制自动售卖机(自动售卖机装有Android系统,装有App)出商品,也就是我们熟知的远程控制,不用你人到现场,就可以解决很多问题,所以这个功能会大大的提高我们的便捷性,实现无人值守。那么有什么技术可以实现这个这个?现成的第三方框架有个推,也可以自己搭建一个RabbitMQ平台,这样维护也方便一些,出现问题也可以及时修复和处理。这篇文章,我们就来讲讲App如何接入RabbitMQ。
2024-10-11 21:54:26
1409
原创 Android 内存优化:什么原因导致内存问题?通过内存工具进行分析;内存抖动和内存泄漏;MAT的使用;Profiler的使用;如何优化?
我们开发一个App程序,如果不了解内存的使用情况,就是将稳定性弃之不管。因为你不知道他在什么时候会发生OOM问题,不知道为什么程序会卡顿,不知道为什么会发生问题。你也没有自信跟别人说,你可以也出一个稳定可靠的App程序,所以这一篇文章,我们来研究一下内存优化。Android进行内存优化是为了提高应用的稳定性、流畅性和存活时间,同时降低应用占用的ROM空间。
2024-10-06 21:28:33
1767
1
原创 一篇文章搞懂Android 刷卡器对接:RS232 DB9串口通讯,通讯设置,刷卡器API介绍;代码示例;MDB协议;
在一些国家,还没有普及扫码支付的时候,消费者会纸币、硬币或者刷卡进行支付,这里我们讲解一下刷卡支付。在市面上,有哪家刷卡器公司可以说的上是开通了很多国家的支付银行,那么Nayax和Pax可以说的上是名列前茅,他们适配了很多国家,对接其他国家的银行,让我们只需要接入了他们的刷卡器,就可以实现在全国各地实现刷卡支付,而不需要我们去对接这些国家的银行,真的是非常方便。当然,他们也并不是全部国家都适配到了,也会出现有一些国家没有的情况,这个时候,你也可以选择当地国家开发的刷卡器。
2024-10-06 07:27:31
1047
1
原创 一篇搞定Android 实现扫码支付:如何对接海外的第三方支付;项目中的真实经验分享;如何高效对接,高效开发
接下来的几篇文章,我会介绍一下,在实际项目中,我们会介绍,如何接入第三方支付(国外),比如纸币、找零、扫码以及刷卡等。我们将深入探讨在接入这些支付**系统前所需的准备工作、接入过程中双方的协作方式,以及接入完成后的交付流程。这些经验均源自我的亲身开发实践。**在这个过程中,我遇到了不少挑战,也浪费了许多宝贵的时间。因此,我迫切希望将这些经验分享给你们,以帮助你们在未来的项目中更加顺利地完成支付系统的接入。这些支付方式在自动售卖机中尤为常见,特别是在海外,自动售卖机几乎随处可见。
2024-10-05 14:14:34
1858
原创 Android Context是什么?有很多的context他们之间有什么区别?什么时候该使用哪个?
在Android中,Context是一个抽象类 ,它代表了应用程序的当前状态,包括资源和类加载器等,它提供了一个应用运行所需的信息,比如我们要获取资源 ,那么需要她,启动Activity,获取系统服务等,都会需要它。可以理解为它应用赖以生存的运行环境。
2024-10-02 23:18:42
1050
1
原创 Android Glide(一):源码分析,内存缓存和磁盘缓存的分析,实现流程以及生命周期
Android Glide是一个由Google维护的快速高效的Android图像加载库,它旨在简化在Android应用程序中加载和显示图像的过程,包括内存缓存、磁盘缓存和网络加载,以确保图像加载的快速和流畅。设置的很简单,提供url以及ImageView。但如果只是会使用,那么对我们的技术是没有什么提升的,所以这篇文章,我们就来看看他的底层实现是怎么样的。
2024-09-28 09:46:32
1604
原创 ARouter原理(一):什么是组件化,组件化解决的问题是什么?你会了解到Dex是什么,APT是什么?
组件化是指将一个复杂的系统或应用拆分成多个相对独立、功能单一的组件(或模块)。在Android工程中,这通常意味着将app按照其业务功能的不同,划分为不同的Module(模块)。这样就解决了问题一和问题二。每个Module都可以看作是一个小型的应用,具有独立的开发、编译和测试的能力,就像一个app一样。这样就解决问题三。这些模块的的特点1、各个组件专注自身功能的实现,模块中代码高度聚合,只负责一项任务,也就是常说的单一责任原则;2、各业务研发可以互不干扰、提升协作效率;
2024-09-24 19:50:55
772
原创 书籍阅读—影响力(一):如何让你的提议或要求被别人采纳?90%的人都会试的一种方法
我们举个例子,总结它确实是个好东西,但人的天性是懒的,没有危机感是很难有动力,但看到别人都写了总结,这个时候就会产生攀比的心态,如果别人因为写了这个总结变得比我还厉害呢?比方说,我们遇到一个这样的问题,大家参加了一个演讲,主办方希望每个人都写总结然后给到他,这样有助于参与者加深对课堂内容的理解,以及主办方也可以了解到这一次的演讲是否开得有意义。在这个忙碌的、信息量超载的社会里,“大伙怎么做我也怎么做”是一个通往明智决策的、相当高效的捷径,无论人们要做的决策是看哪场电影,或是频繁光顾哪个餐馆。
2024-09-22 08:52:27
396
原创 Android Retrofit源码分析(一):Retrofit是什么?和OkHttp的区别是什么?为什么需要他?
为什么会出现Retrofit?它的作用是什么?
2024-09-20 21:33:16
1229
1
空空如也
泛型的上限、下限体现
2017-12-02
TA创建的收藏夹 TA关注的收藏夹
TA关注的人