
Android
文章平均质量分 86
分享关于android的一些知识,碎片分享
前期后期
努力,专注,耐心,恒心,专注移动开发领域
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Kotlin的委托(by,by lazy)是什么?在看源码的时候不知道他的作用是什么,为什么使用,那么你看看这篇文章。
想象你要出国旅游,但不会说英语,于是你找了个翻译帮你沟通。翻译就是你的“委托对象”,你“委托”翻译帮你处理语言问题。在 Kotlin 中,委托(Delegation) 就是这个道理:让一个对象(委托对象)代替另一个对象(被委托对象)完成某些任务。// 定义接口fun play()fun stop()// 普通播放器实现接口override fun play() { println("播放音乐") }override fun stop() { println("停止播放") }原创 2025-03-30 12:01:11 · 969 阅读 · 0 评论 -
Kotlin的扩展函数:给任何类添加你想要的功能,即使是自带类,第三方类。
• 扩展函数是 Kotlin 的“魔法工具”,用于无侵入性地增强类的功能。• 适用场景:工具函数、第三方类扩展、语义化封装。• 慎用场景:避免与类原有成员函数冲突,优先使用成员函数。一句话:给任何类添加你想要的功能。原创 2025-03-30 12:26:51 · 463 阅读 · 0 评论 -
Android 使用设计模式:装饰者设计模式,对功能进行封装升级,学会可以让我们的代码更加的简洁。
我遇到什么问题要使用装饰者设计模式?原创 2025-02-28 20:17:45 · 356 阅读 · 0 评论 -
Android :实现登录功能的思路
Android 如何实现登录功能?思路讲解~~~原创 2025-03-11 22:31:17 · 388 阅读 · 0 评论 -
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 · 906 阅读 · 0 评论 -
Android UI:为什么别人的UI看起来很有科技感,并且动画,交互非常的丝滑和顺畅,为什么呢?因为我们没有了解MotionLayout
为什么别人的UI看起来很有科技感,并且动画,交互非常的丝滑和顺畅,为什么呢?因为我们没有了解MotionLayout。MotionLayout 是 Android 中基于 ConstraintLayout 的高级布局容器,在 ConstraintLayout 2.0 版本中引入的。专门用于管理复杂的视图动画和过渡效果。它通过声明式 XML 或代码定义视图的运动路径、关键帧动画和交互行为,适用于实现高度动态的 UI 交互(如折叠效果、滑动抽屉、复杂转场动画等)。1、继承自 ConstraintLayout:完原创 2025-02-24 17:22:54 · 698 阅读 · 0 评论 -
MotionLayout(二):MotionLayout是什么?MotionLayout调试技巧、KeyFrame关键帧等等
将ConstraintLayout布局转换为MotionLayout布局后,Android Studio会自动在xml文件夹生成一个对应的MotionScene文件,在该文件中我们可以定义动画的状态、过渡形式、关键帧的属性、和用户的交互方式等。原创 2025-02-26 22:52:05 · 785 阅读 · 0 评论 -
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 · 395 阅读 · 0 评论 -
App应用混淆:防止反编译、将App包体积降小。
App应用混淆是一种保护代码的技术,旨在增加反编译和逆向工程的难度,防止他人轻易理解或篡改代码逻辑。简单来说,就是把代码替换成a、b、c基本字母组成的代码,比如一个方法名为:test(),混淆后可能会被替换成a()。原创 2025-02-15 20:06:58 · 884 阅读 · 0 评论 -
Android Compose是如何使用什么架构,多个Activity?还是Fragment?compose的ui又是如何卸载和挂载的呢?
最近在学习compose,先是找文章来学习,然后看github上面的源码来学习,最后再找视频来学习,然后再上github的项目学习,接着在根据项目的源码,自己删除再重新写一遍。一波三折。在学习的过程,我就有一个疑问,只有一个Activity,也没有看到Fragment呢,也没有看到更多的Fragment,我好奇,compose的生命周期是如何的,他的页面又是如何加载的,没看到onstart方法,或者页面停止的时候onstop方法。接下来,我们来解答一下这些疑惑。原创 2025-03-11 23:33:26 · 1574 阅读 · 0 评论 -
RecyclerView(快速滚动版本):为什么别人的列表可以滚动的很远,而我们的不能呢?FastScrollRecyclerView
我们在使用应用的时候会发现,为什么别人的RecyclerView滑动可以滚动如此之快呢?而我们的确不行,听很多网友,群友,列表都是使用RecyclerView,这究竟是为什么呢?直到最近在Github上面找项目,看别人源码的时候,才发现,原来有一个这样的控件:FastScrollRecyclerView。原创 2025-02-23 20:36:24 · 373 阅读 · 0 评论 -
Android 消息队列之MQTT的使用:物联网通讯,HTTP太重了,使用MQTT;断网重连、注册、订阅、发送数据和接受数据,实现双向通讯。
目录:问题MQTT是什么以及为什么使用如何使用:第一阶段、基础功能如何使用:第二阶段、增加断网重连如何使用:第三阶段、封装一、问题在开发的时候,我们一般都使用Http和后台进行通讯,比如我们是开发物联网的,设备会有很多数据需要频繁发给后台,使用Http来做这件事情,就感觉很重,比如会遇到如下这些问题:开发成本:需要后台创建接口,前台去请求。连接数过多:在HTTP协议中,每次请求都需要建立一个新的连接,这可能导致连接数过多,特别是在高并发场景下。对于自动售卖机来说,如果同时有大量的原创 2024-12-04 11:51:08 · 1858 阅读 · 0 评论 -
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 · 491 阅读 · 0 评论 -
Android 串口SerialPort:数据不连续的问题
比如本来数据是02 03 06 00 01 00 00 00 FF,02是头,FF是尾,所以我们只需要判断,如果收到了02,那么直到我收到FF,才算是完整的数据,不然的话,我就会使用StringBuild一直拼接,如果拼接到了一定的数据量,还是没有,那么就要报错清空了。在跟下位机通讯的时候,我发现有时候会出现数据没有回来的情况,打log发现是下位机返回的数据量太大了,导致还没有完全放到流里面,我们就取走了,这样,上位机获取的数据就是不完整的。原创 2024-12-01 20:31:08 · 355 阅读 · 0 评论 -
Android 还在使用LogCat打日志?XLog框架;日志打印到控制台,打印到文件中。
首先,System.out.println 是一个同步方法,每次调用都会导致 I/O 操作,比较耗时,频繁使用甚至会严重影响应用程序的性能,所以不建议在生产环境使用。日志是我们系统出现错误时,最快速有效的定位工具,没有日志给出的错误信息,遇到报错你就会一脸懵逼;而且日志还可以用来记录业务信息,比如记录用户执行的每个操作,不仅可以用于分析改进系统,同时在遇到非法操作时,也能很快找到凶手。好了,这篇文章就介绍到这里~,我是前期后期,如果你也有日志相关的经验分享,也可以在评论区讨论哦,我们下一篇文章再见。原创 2024-12-03 20:59:49 · 835 阅读 · 0 评论 -
Android 如何写代码更少出现bug?借助IDE的检测代码质量插件来解决。
检查代码规范的话,直接使用 Alibaba Java Coding Guidelines。找 BUG 的话,使用 PMD、SonarLint 相互补充。原创 2024-11-07 18:00:00 · 910 阅读 · 0 评论 -
Android 在github网站下载项目:各种很慢怎么办?比如gradle下载慢;访问github慢;依赖下载慢
大家好,我是前期后期,在网上冲浪的一名程序员。为什么要看这篇文章呢?问题是什么?我们在Github上面看到一些好的项目的时候,想下载下来研究学习一下。但经常遇到各种网络问题,下载速度问题,导致我们学习兴趣下降。所以今天就给大家分享这个过程中遇到的问题如何解决。原创 2024-10-27 10:16:15 · 1043 阅读 · 0 评论 -
Android 如何实现远程网页控制售卖机出商品:RabbitMQ的对接,如何使用?如何断网重连?连接不上后台的MQ有哪些方面的原因
比如,我们想实现,通过一个网页去控制自动售卖机(自动售卖机装有Android系统,装有App)出商品,也就是我们熟知的远程控制,不用你人到现场,就可以解决很多问题,所以这个功能会大大的提高我们的便捷性,实现无人值守。那么有什么技术可以实现这个这个?现成的第三方框架有个推,也可以自己搭建一个RabbitMQ平台,这样维护也方便一些,出现问题也可以及时修复和处理。这篇文章,我们就来讲讲App如何接入RabbitMQ。原创 2024-10-11 21:54:26 · 1480 阅读 · 0 评论 -
Android 内存优化:什么原因导致内存问题?通过内存工具进行分析;内存抖动和内存泄漏;MAT的使用;Profiler的使用;如何优化?
我们开发一个App程序,如果不了解内存的使用情况,就是将稳定性弃之不管。因为你不知道他在什么时候会发生OOM问题,不知道为什么程序会卡顿,不知道为什么会发生问题。你也没有自信跟别人说,你可以也出一个稳定可靠的App程序,所以这一篇文章,我们来研究一下内存优化。Android进行内存优化是为了提高应用的稳定性、流畅性和存活时间,同时降低应用占用的ROM空间。原创 2024-10-06 21:28:33 · 1878 阅读 · 0 评论 -
一篇文章搞懂Android 刷卡器对接:RS232 DB9串口通讯,通讯设置,刷卡器API介绍;代码示例;MDB协议;
在一些国家,还没有普及扫码支付的时候,消费者会纸币、硬币或者刷卡进行支付,这里我们讲解一下刷卡支付。在市面上,有哪家刷卡器公司可以说的上是开通了很多国家的支付银行,那么Nayax和Pax可以说的上是名列前茅,他们适配了很多国家,对接其他国家的银行,让我们只需要接入了他们的刷卡器,就可以实现在全国各地实现刷卡支付,而不需要我们去对接这些国家的银行,真的是非常方便。当然,他们也并不是全部国家都适配到了,也会出现有一些国家没有的情况,这个时候,你也可以选择当地国家开发的刷卡器。原创 2024-10-06 07:27:31 · 1312 阅读 · 0 评论 -
一篇搞定Android 实现扫码支付:如何对接海外的第三方支付;项目中的真实经验分享;如何高效对接,高效开发
接下来的几篇文章,我会介绍一下,在实际项目中,我们会介绍,如何接入第三方支付(国外),比如纸币、找零、扫码以及刷卡等。我们将深入探讨在接入这些支付**系统前所需的准备工作、接入过程中双方的协作方式,以及接入完成后的交付流程。这些经验均源自我的亲身开发实践。**在这个过程中,我遇到了不少挑战,也浪费了许多宝贵的时间。因此,我迫切希望将这些经验分享给你们,以帮助你们在未来的项目中更加顺利地完成支付系统的接入。这些支付方式在自动售卖机中尤为常见,特别是在海外,自动售卖机几乎随处可见。原创 2024-10-05 14:14:34 · 2327 阅读 · 0 评论 -
Android Context是什么?有很多的context他们之间有什么区别?什么时候该使用哪个?
在Android中,Context是一个抽象类 ,它代表了应用程序的当前状态,包括资源和类加载器等,它提供了一个应用运行所需的信息,比如我们要获取资源 ,那么需要她,启动Activity,获取系统服务等,都会需要它。可以理解为它应用赖以生存的运行环境。原创 2024-10-02 23:18:42 · 1104 阅读 · 0 评论 -
Android Glide(一):源码分析,内存缓存和磁盘缓存的分析,实现流程以及生命周期
Android Glide是一个由Google维护的快速高效的Android图像加载库,它旨在简化在Android应用程序中加载和显示图像的过程,包括内存缓存、磁盘缓存和网络加载,以确保图像加载的快速和流畅。设置的很简单,提供url以及ImageView。但如果只是会使用,那么对我们的技术是没有什么提升的,所以这篇文章,我们就来看看他的底层实现是怎么样的。原创 2024-09-28 09:46:32 · 1669 阅读 · 0 评论 -
ARouter原理(一):什么是组件化,组件化解决的问题是什么?你会了解到Dex是什么,APT是什么?
组件化是指将一个复杂的系统或应用拆分成多个相对独立、功能单一的组件(或模块)。在Android工程中,这通常意味着将app按照其业务功能的不同,划分为不同的Module(模块)。这样就解决了问题一和问题二。每个Module都可以看作是一个小型的应用,具有独立的开发、编译和测试的能力,就像一个app一样。这样就解决问题三。这些模块的的特点1、各个组件专注自身功能的实现,模块中代码高度聚合,只负责一项任务,也就是常说的单一责任原则;2、各业务研发可以互不干扰、提升协作效率;原创 2024-09-24 19:50:55 · 809 阅读 · 0 评论 -
Android Retrofit源码分析(一):Retrofit是什么?和OkHttp的区别是什么?为什么需要他?
为什么会出现Retrofit?它的作用是什么?原创 2024-09-20 21:33:16 · 1270 阅读 · 1 评论 -
Android OkHttp源码分析(一):为什么OkHttp的请求速度很快?为什么可以高扩展?为什么可以高并发
在不使用OkHhttp之前,我们都是在使用什么?使用HttpURLConnection,那么我们看看HttpURLConnection发起一次请求,两次请求要花多长时间,而OkHttp花多长时间。HttpURLConnection会比okhttp花更多的时间。readLineduration(2)OkHttp${responsecodeduration可以看到,时间不相上下,为什么呢?不是说OkHttp更快?原创 2024-09-17 23:55:54 · 1528 阅读 · 1 评论 -
Android 如何实现搜索功能:本地搜索?数据模型如何设计?数据如何展示和保存?
其实搜索功能的重点在于数据模型的设计,还有apdater布局的设置。以前都是一个一个控件的增加,数据也可以直接就增加,所以维护很模仿,现在换成了recycleview,所以我们需要思考每一个item,他的数据应该如何展示,默认值是如何,在哪个分类,如何保存数据。原创 2024-09-16 17:07:47 · 1544 阅读 · 0 评论 -
Android Shape是什么?渐变、描边、圆角,如何使用?真实场景使用
Android中的shape主要用于绘制简单图形并控制这些图形的样式。Shape的定义文件是XML格式的,以元素为根节点,通过不同的子节点和属性来控制图形的具体表现。Shape允许开发者自定义控件(如按钮、文本框等)的背景、边框等样式,使得应用界面更加美观和个性化。通过设置shape的corners、solid、stroke等属性,可以轻松实现圆角背景、纯色填充、边框描边等效果。效果如下图:我们可以注意到这个按钮,有描边、有圆角以及渐变,是如何实现的?原创 2024-09-09 20:51:22 · 2255 阅读 · 0 评论 -
Android Dialog:Dialog和DialogFragment的区别?DialogFragment如何使用?源码解析
Dialog在创建时会关联一个Context(上下文),并通过这个Context获取WindowManager服务,进而与WindowManager绑定,实现窗口的添加和管理。如果onCreateDialog不传递一个新的dialog,那么就会使用默认的,而布局,就是从onCreateView里面取,也就是requireView方法。Dialog是Android中用于显示一个浮动窗口的类,这个窗口会覆盖在当前的活动(Activity)或应用程序的顶部。我们可以看一下Dialog的源码。原创 2024-09-06 19:23:21 · 2504 阅读 · 0 评论 -
Android 列表或网格形式展示大量数据:RecyclerView(三):为什么有时候会一次性加载全部的item呢?(Android5和Android11不一样。)
但,当RecyclerView的宽度和高度设置wrap_content时,会导致全部item一次性加载,原因是,RecyclerView无法根据父容器的来动态计算可见区域。它会根据所有item的尺寸来确定自身的寸。这意味着RecyclerView会将所有的item都实例化并布局出来,以便测量它们的尺寸,并根据这些尺寸来确定RecyclerView的最终尺寸。RecyclerView的高度设置为wrap_content时,它会根据屏幕尺寸和布局约束来动态计算可见区域,并只实例化和布局显示在屏幕上的item。原创 2024-09-03 14:30:08 · 820 阅读 · 0 评论 -
Android 事件分发:为什么有时候会出现事件冲突?事件的顺序是如何的?出现事件冲突如何解决呢?比如为什么左右可以滑动,而上下却不行?
事件分发的源码第一次看比较复杂,需要反复观看,才能理解,并且结合控件案例去测试,效果会更好。原创 2024-08-30 21:41:37 · 1138 阅读 · 0 评论 -
Android UI绘制原理:UI的绘制流程是怎么样呢?为什么子线程不能刷新UI呢?讲解大体的流程是怎么样的
刚开始看UI绘制原理的时候,完全看不懂,硬着头皮去看,渐渐的有些可以看懂了,但绝大部分还是不懂。这个时候,我就从“为什么子线程不能刷新UI呢?”入手,比如不能刷新原因是什么,了解原因后,你懂了,但你会发现你不懂的地方也会更多,但是,你已经知道你有哪些不懂了,这个时候,你重新回头去看第二篇的时候,你思路就清晰很多了,你又能看懂很多了。所以,第一次看肯定有很多不懂,那么就第二次,第三次。原创 2024-08-28 05:29:03 · 1098 阅读 · 0 评论 -
Android APK优化系列瘦身篇:实战一个APK从11MB压缩到4MB,APK无用资源去除与代码压缩、混淆,瘦身维度的选型分析
SVG一般是用于纯色的图标;svg至少比jpg小一半,图片越大,体积越明显。Webp一般用与网络传输的图片;PNG格式也常用于屏幕截图和界面设计稿的保存。由于它支持透明背景和多种颜色深度,可以确保设计稿在不同设备和环境下的显示效果一致。由于JPG格式的广泛支持和较高的压缩率,它成为网络上共享图片的首选格式之一。Android应用中的图片分享功能通常会使用JPG格式来发送图片。所以我们可以将图片转换成对应的格式,会减少体积。原创 2024-08-25 22:18:14 · 3342 阅读 · 5 评论 -
Android Kotlin优化代码整洁:with、applay以及run是什么,作用,区别
with函数和run函数的区别在于返回值,with返回函数块的最后一行代码的结果,而run返回函数块的最后一行代码的结果。apply函数返回调用者本身。这些函数可以帮助我们简化代码,提高可读性,并且避免重复地引用同一个对象。原创 2024-08-24 09:57:28 · 566 阅读 · 0 评论 -
Andrid异步更新UI:Handler(二)深入了解:Message你真的会创建?它是如何子线程和主线程通知?
线程分为主线程(主线程又叫UI线程)和子线程,主线程即ActivityThread,规定只有此线程能操作UI,但我们从后台请求数据,都是在子线程操作,所以需要有人帮忙把线程切换一下,所以就有了Handler。原创 2024-08-23 00:33:26 · 763 阅读 · 0 评论 -
Android串口开发:Serialport(如何进行串口开发,数据发送,TX和RX,A和B,粘包)
我们简单来看看他的协议,以及我们应该如何发送数据和接收数据。(1)需要厂家提供通讯参数(2)通讯文档,比如,查询下位机状态,还有很多协议内容,这里就讲一个:有了这些信息,先不着急写代码,先使用串口工具测试一下收发数据是否正常。打开串口通讯工具,设置通讯参数,然后发送数据就可以了。/*** 原始命令*//*** 帧开始*//*** 帧结束*//*** CMD指令:查询设备ID*//*** 命令帧*//*** 开始字符*//*** 字节长度*/原创 2024-08-16 14:57:15 · 10362 阅读 · 1 评论 -
Android 实现多进程通讯(如何实现多进程开发,Binder、AIDL)
多进程是指一个应用程序可以同时运行在多个独立的进程中。每个进程都有自己独立的虚拟机实例和资源管理器,并且它们之间相互隔离。一个应用可以有多个进程,就有多个dalivk虚拟机,对应多个内存空间。默认情况下,Android应用程序在同一个进程中运行,即单进程模式。这意味着应用程序的所有组件(Activity、Service、BroadcastReceiver等)都在同一个进程中执行。原创 2024-08-12 22:30:43 · 1648 阅读 · 0 评论 -
Adnroid 数据存储:SharedPreferences详解(一)【SP是什么、如何使用;SPUtils;SP的流程;comit和apply】
1)SP是什么、如何使用,SPUtils2)SP的流程3)comit和apply。原创 2024-08-09 22:40:08 · 890 阅读 · 0 评论 -
Adnroid 数据存储 SharedPreferences详解(二):SP的问题、原理分析、替代方案、MMAP
特点说明数据格式XML格式保存初始化子线程使用传统IO读取整个文件,进行xml解析,再存入内存的Map中数据读取会等待初始化加载完成,才会进行读取更新把Map中的数据,全部序列化为XML,覆盖文件,全量写入所以我们可以看到存在很多缺点,全量数据写入,传统的IO操作,会导致操作文件效率低下,不支持局部更新,阻塞主线程等等,下面我们会讲讲MMAP技术。原创 2024-08-11 16:03:31 · 2843 阅读 · 0 评论 -
Android Fragment:详解,结合真实开发场景Navigation
1)Fragment是什么2)Fragment的应用场景3)为什么使用Fragment?4)Fragment如何使用5)Fragment的生命周期6)Android开发,建议是多个activity,还是activity结合fragment,优缺点如何?7)Fragment和Activity的通讯、返回键如何处理8)Navigation搭配Fragment使用后,事务是怎么样?原创 2024-08-08 22:52:15 · 2250 阅读 · 0 评论