- 博客(74)
- 问答 (1)
- 收藏
- 关注
原创 Android 策略设计模式的使用:使用设计模式,减少烂代码,让项目更好维护
在项目开发过程中,我们会对接很多种支付:国内(微信、支付宝),海外(日本的TakeMe、UnivaPay)等等,如果我们使用的是MVVM、或者MVP架构,那么这些逻辑都会在VM层或者P层。/*** 微信支付宝 获取二维码} /*** takeMe Pay 获取二维码} /*** univa Pay 获取二维码} /*** univa Pay 查询支付结果} /*** takeMe Pay 查询支付结果} }
2024-11-01 20:50:15 808
原创 Android 在github网站下载项目:各种很慢怎么办?比如gradle下载慢;访问github慢;依赖下载慢
大家好,我是前期后期,在网上冲浪的一名程序员。为什么要看这篇文章呢?问题是什么?我们在Github上面看到一些好的项目的时候,想下载下来研究学习一下。但经常遇到各种网络问题,下载速度问题,导致我们学习兴趣下降。所以今天就给大家分享这个过程中遇到的问题如何解决。
2024-10-27 10:16:15 555
原创 Android 从0搭建初始化MVVM项目框架(二):添加版本依赖管理、分包分模块、组件化Aroute
Android 从0搭建初始化MVVM项目框架(二):添加版本依赖管理、数据库、路由、分包分模块、组件化Aroute。
2024-10-22 19:51:32 1144
原创 Android 从0搭建初始化MVVM项目框架(一):如何搭建属于自己的项目框架?如何创建BaseActivity?如何整合viewbinding?如何整合网络框架?
使用MVVM架构进行搭建,使用Kotlin语言开发,整合网络框架OkHttp+Retorfit,依赖注入框架Hilt,数据库Room等等。当我们搭建了一个这样的框架后,以后我们开发项目可以直接拿来就用,省去了很多的开发时间。为什么明明github有了,我们还需要自己去做一个呢?一方面是为了学习,了解他的架构设计,如何整合其他框架,整合的过程中会遇到什么问题(我遇到最多的问题就是构建问题)。
2024-10-22 14:21:16 708
原创 为什么说努力的作用被大大高估 ?我们应该这么做?打破我们对打工的认知!打破我们对努力的认知!打破我们对创新的认知!那么机会在哪里呢?为什么我们有新奇的点子,但是最后却不了了之了呢?
在现代经济中,工作的努力程度并没有那么重要。判断力更重要。在前进的过程中,方向比速度更重要。在每个岔路口选对方向,其重要程度要远远超过前进的努力程度。人生就是选择正确的方向,然后朝这个方向奋力前行。与埋头苦干相比,更重要的是理解和思考。没有思考,你就不会有出色的商业创意,也不可能做出正确的判断。我鼓励大家每周至少花一天时间来思考。一个倍感压力、案牍劳形、四处奔波、焦头烂额的人,是没有办法思考的。所以,一定要为思考挤出时间。
2024-10-11 23:59:45 361
原创 Android 如何实现远程网页控制售卖机出商品:RabbitMQ的对接,如何使用?如何断网重连?连接不上后台的MQ有哪些方面的原因
比如,我们想实现,通过一个网页去控制自动售卖机(自动售卖机装有Android系统,装有App)出商品,也就是我们熟知的远程控制,不用你人到现场,就可以解决很多问题,所以这个功能会大大的提高我们的便捷性,实现无人值守。那么有什么技术可以实现这个这个?现成的第三方框架有个推,也可以自己搭建一个RabbitMQ平台,这样维护也方便一些,出现问题也可以及时修复和处理。这篇文章,我们就来讲讲App如何接入RabbitMQ。
2024-10-11 21:54:26 1309
原创 Android 内存优化:什么原因导致内存问题?通过内存工具进行分析;内存抖动和内存泄漏;MAT的使用;Profiler的使用;如何优化?
我们开发一个App程序,如果不了解内存的使用情况,就是将稳定性弃之不管。因为你不知道他在什么时候会发生OOM问题,不知道为什么程序会卡顿,不知道为什么会发生问题。你也没有自信跟别人说,你可以也出一个稳定可靠的App程序,所以这一篇文章,我们来研究一下内存优化。Android进行内存优化是为了提高应用的稳定性、流畅性和存活时间,同时降低应用占用的ROM空间。
2024-10-06 21:28:33 1504
原创 一篇文章搞懂Android 刷卡器对接:RS232 DB9串口通讯,通讯设置,刷卡器API介绍;代码示例;MDB协议;
在一些国家,还没有普及扫码支付的时候,消费者会纸币、硬币或者刷卡进行支付,这里我们讲解一下刷卡支付。在市面上,有哪家刷卡器公司可以说的上是开通了很多国家的支付银行,那么Nayax和Pax可以说的上是名列前茅,他们适配了很多国家,对接其他国家的银行,让我们只需要接入了他们的刷卡器,就可以实现在全国各地实现刷卡支付,而不需要我们去对接这些国家的银行,真的是非常方便。当然,他们也并不是全部国家都适配到了,也会出现有一些国家没有的情况,这个时候,你也可以选择当地国家开发的刷卡器。
2024-10-06 07:27:31 663
原创 一篇搞定Android 实现扫码支付:如何对接海外的第三方支付;项目中的真实经验分享;如何高效对接,高效开发
接下来的几篇文章,我会介绍一下,在实际项目中,我们会介绍,如何接入第三方支付(国外),比如纸币、找零、扫码以及刷卡等。我们将深入探讨在接入这些支付**系统前所需的准备工作、接入过程中双方的协作方式,以及接入完成后的交付流程。这些经验均源自我的亲身开发实践。**在这个过程中,我遇到了不少挑战,也浪费了许多宝贵的时间。因此,我迫切希望将这些经验分享给你们,以帮助你们在未来的项目中更加顺利地完成支付系统的接入。这些支付方式在自动售卖机中尤为常见,特别是在海外,自动售卖机几乎随处可见。
2024-10-05 14:14:34 1424
原创 Android Context是什么?有很多的context他们之间有什么区别?什么时候该使用哪个?
在Android中,Context是一个抽象类 ,它代表了应用程序的当前状态,包括资源和类加载器等,它提供了一个应用运行所需的信息,比如我们要获取资源 ,那么需要她,启动Activity,获取系统服务等,都会需要它。可以理解为它应用赖以生存的运行环境。
2024-10-02 23:18:42 934
原创 Android Glide(一):源码分析,内存缓存和磁盘缓存的分析,实现流程以及生命周期
Android Glide是一个由Google维护的快速高效的Android图像加载库,它旨在简化在Android应用程序中加载和显示图像的过程,包括内存缓存、磁盘缓存和网络加载,以确保图像加载的快速和流畅。设置的很简单,提供url以及ImageView。但如果只是会使用,那么对我们的技术是没有什么提升的,所以这篇文章,我们就来看看他的底层实现是怎么样的。
2024-09-28 09:46:32 1429
原创 ARouter原理(一):什么是组件化,组件化解决的问题是什么?你会了解到Dex是什么,APT是什么?
组件化是指将一个复杂的系统或应用拆分成多个相对独立、功能单一的组件(或模块)。在Android工程中,这通常意味着将app按照其业务功能的不同,划分为不同的Module(模块)。这样就解决了问题一和问题二。每个Module都可以看作是一个小型的应用,具有独立的开发、编译和测试的能力,就像一个app一样。这样就解决问题三。这些模块的的特点1、各个组件专注自身功能的实现,模块中代码高度聚合,只负责一项任务,也就是常说的单一责任原则;2、各业务研发可以互不干扰、提升协作效率;
2024-09-24 19:50:55 691
原创 书籍阅读—影响力(一):如何让你的提议或要求被别人采纳?90%的人都会试的一种方法
我们举个例子,总结它确实是个好东西,但人的天性是懒的,没有危机感是很难有动力,但看到别人都写了总结,这个时候就会产生攀比的心态,如果别人因为写了这个总结变得比我还厉害呢?比方说,我们遇到一个这样的问题,大家参加了一个演讲,主办方希望每个人都写总结然后给到他,这样有助于参与者加深对课堂内容的理解,以及主办方也可以了解到这一次的演讲是否开得有意义。在这个忙碌的、信息量超载的社会里,“大伙怎么做我也怎么做”是一个通往明智决策的、相当高效的捷径,无论人们要做的决策是看哪场电影,或是频繁光顾哪个餐馆。
2024-09-22 08:52:27 352
原创 Android Retrofit源码分析(一):Retrofit是什么?和OkHttp的区别是什么?为什么需要他?
为什么会出现Retrofit?它的作用是什么?
2024-09-20 21:33:16 1123 1
原创 Android OkHttp源码分析(一):为什么OkHttp的请求速度很快?为什么可以高扩展?为什么可以高并发
在不使用OkHhttp之前,我们都是在使用什么?使用HttpURLConnection,那么我们看看HttpURLConnection发起一次请求,两次请求要花多长时间,而OkHttp花多长时间。HttpURLConnection会比okhttp花更多的时间。readLineduration(2)OkHttp${responsecodeduration可以看到,时间不相上下,为什么呢?不是说OkHttp更快?
2024-09-17 23:55:54 1288 1
原创 Android 如何实现搜索功能:本地搜索?数据模型如何设计?数据如何展示和保存?
其实搜索功能的重点在于数据模型的设计,还有apdater布局的设置。以前都是一个一个控件的增加,数据也可以直接就增加,所以维护很模仿,现在换成了recycleview,所以我们需要思考每一个item,他的数据应该如何展示,默认值是如何,在哪个分类,如何保存数据。
2024-09-16 17:07:47 1240
原创 Android Shape是什么?渐变、描边、圆角,如何使用?真实场景使用
Android中的shape主要用于绘制简单图形并控制这些图形的样式。Shape的定义文件是XML格式的,以元素为根节点,通过不同的子节点和属性来控制图形的具体表现。Shape允许开发者自定义控件(如按钮、文本框等)的背景、边框等样式,使得应用界面更加美观和个性化。通过设置shape的corners、solid、stroke等属性,可以轻松实现圆角背景、纯色填充、边框描边等效果。效果如下图:我们可以注意到这个按钮,有描边、有圆角以及渐变,是如何实现的?
2024-09-09 20:51:22 874
原创 Android Dialog:Dialog和DialogFragment的区别?DialogFragment如何使用?源码解析
Dialog在创建时会关联一个Context(上下文),并通过这个Context获取WindowManager服务,进而与WindowManager绑定,实现窗口的添加和管理。如果onCreateDialog不传递一个新的dialog,那么就会使用默认的,而布局,就是从onCreateView里面取,也就是requireView方法。Dialog是Android中用于显示一个浮动窗口的类,这个窗口会覆盖在当前的活动(Activity)或应用程序的顶部。我们可以看一下Dialog的源码。
2024-09-06 19:23:21 1448
原创 Android 列表或网格形式展示大量数据:RecyclerView(三):为什么有时候会一次性加载全部的item呢?(Android5和Android11不一样。)
但,当RecyclerView的宽度和高度设置wrap_content时,会导致全部item一次性加载,原因是,RecyclerView无法根据父容器的来动态计算可见区域。它会根据所有item的尺寸来确定自身的寸。这意味着RecyclerView会将所有的item都实例化并布局出来,以便测量它们的尺寸,并根据这些尺寸来确定RecyclerView的最终尺寸。RecyclerView的高度设置为wrap_content时,它会根据屏幕尺寸和布局约束来动态计算可见区域,并只实例化和布局显示在屏幕上的item。
2024-09-03 14:30:08 522
原创 Android 事件分发:为什么有时候会出现事件冲突?事件的顺序是如何的?出现事件冲突如何解决呢?比如为什么左右可以滑动,而上下却不行?
事件分发的源码第一次看比较复杂,需要反复观看,才能理解,并且结合控件案例去测试,效果会更好。
2024-08-30 21:41:37 947
原创 Android UI绘制原理:UI的绘制流程是怎么样呢?为什么子线程不能刷新UI呢?讲解大体的流程是怎么样的
刚开始看UI绘制原理的时候,完全看不懂,硬着头皮去看,渐渐的有些可以看懂了,但绝大部分还是不懂。这个时候,我就从“为什么子线程不能刷新UI呢?”入手,比如不能刷新原因是什么,了解原因后,你懂了,但你会发现你不懂的地方也会更多,但是,你已经知道你有哪些不懂了,这个时候,你重新回头去看第二篇的时候,你思路就清晰很多了,你又能看懂很多了。所以,第一次看肯定有很多不懂,那么就第二次,第三次。
2024-08-28 05:29:03 836
原创 Android APK优化系列瘦身篇:实战一个APK从11MB压缩到4MB,APK无用资源去除与代码压缩、混淆,瘦身维度的选型分析
SVG一般是用于纯色的图标;svg至少比jpg小一半,图片越大,体积越明显。Webp一般用与网络传输的图片;PNG格式也常用于屏幕截图和界面设计稿的保存。由于它支持透明背景和多种颜色深度,可以确保设计稿在不同设备和环境下的显示效果一致。由于JPG格式的广泛支持和较高的压缩率,它成为网络上共享图片的首选格式之一。Android应用中的图片分享功能通常会使用JPG格式来发送图片。所以我们可以将图片转换成对应的格式,会减少体积。
2024-08-25 22:18:14 2004 5
原创 Android Kotlin优化代码整洁:with、applay以及run是什么,作用,区别
with函数和run函数的区别在于返回值,with返回函数块的最后一行代码的结果,而run返回函数块的最后一行代码的结果。apply函数返回调用者本身。这些函数可以帮助我们简化代码,提高可读性,并且避免重复地引用同一个对象。
2024-08-24 09:57:28 483
原创 Andrid异步更新UI:Handler(二)深入了解:Message你真的会创建?它是如何子线程和主线程通知?
线程分为主线程(主线程又叫UI线程)和子线程,主线程即ActivityThread,规定只有此线程能操作UI,但我们从后台请求数据,都是在子线程操作,所以需要有人帮忙把线程切换一下,所以就有了Handler。
2024-08-23 00:33:26 713
原创 Android串口开发:Serialport(如何进行串口开发,数据发送,TX和RX,A和B,粘包)
我们简单来看看他的协议,以及我们应该如何发送数据和接收数据。(1)需要厂家提供通讯参数(2)通讯文档,比如,查询下位机状态,还有很多协议内容,这里就讲一个:有了这些信息,先不着急写代码,先使用串口工具测试一下收发数据是否正常。打开串口通讯工具,设置通讯参数,然后发送数据就可以了。/*** 原始命令*//*** 帧开始*//*** 帧结束*//*** CMD指令:查询设备ID*//*** 命令帧*//*** 开始字符*//*** 字节长度*/
2024-08-16 14:57:15 3561 1
原创 Android 实现多进程通讯(如何实现多进程开发,Binder、AIDL)
多进程是指一个应用程序可以同时运行在多个独立的进程中。每个进程都有自己独立的虚拟机实例和资源管理器,并且它们之间相互隔离。一个应用可以有多个进程,就有多个dalivk虚拟机,对应多个内存空间。默认情况下,Android应用程序在同一个进程中运行,即单进程模式。这意味着应用程序的所有组件(Activity、Service、BroadcastReceiver等)都在同一个进程中执行。
2024-08-12 22:30:43 1288
原创 Adnroid 数据存储 SharedPreferences详解(二):SP的问题、原理分析、替代方案、MMAP
特点说明数据格式XML格式保存初始化子线程使用传统IO读取整个文件,进行xml解析,再存入内存的Map中数据读取会等待初始化加载完成,才会进行读取更新把Map中的数据,全部序列化为XML,覆盖文件,全量写入所以我们可以看到存在很多缺点,全量数据写入,传统的IO操作,会导致操作文件效率低下,不支持局部更新,阻塞主线程等等,下面我们会讲讲MMAP技术。
2024-08-11 16:03:31 2304
原创 Adnroid 数据存储:SharedPreferences详解(一)【SP是什么、如何使用;SPUtils;SP的流程;comit和apply】
1)SP是什么、如何使用,SPUtils2)SP的流程3)comit和apply。
2024-08-09 22:40:08 754
原创 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 1210
原创 Android 自定义View(二):画布、画笔、路径(遮罩)以及Sufaceview
1)画布是什么?画布如何使用?2)画笔是什么,画笔如何生成呢?3)如何画圆、画文字、画矩形4)路径(Path)遮罩5)Sufaceview(使用子线程绘画)
2024-08-06 20:51:14 798
原创 Android 自定义View(一):View是什么?如何创建自定义view,自定义属性等
当android内置view无法满足我们的时候,我们需要自定义View。那么我们应该如何自定义?如何绘制呢?接下来,我们会通过一个案例进行讲解。class MyEditText @JvmOverloads constructor(//第一步:继承EditText= nullinit {//直接设置显示出来x。) {//第二步:当文字发生改变的时候,则调用这个方法,进行图标的显示//第四步:触摸的时候,并且坐标是在图标上面,才进行文字的删除。event?
2024-08-05 20:59:58 1560
原创 Android 本地化、多语言切换:Localization
1)如何实现多语言切换、如何实现跟随手机语言切换而切换app语言2)Localization是什么3)不管手机语言如何,根据用户在App选择的语言,只切换App语言4)文字长短不一样,怎么办呢?
2024-08-04 21:12:22 976
原创 Android 实现左侧导航栏:NavigationView是什么?NavigationView和Navigation搭配使用
1)左侧导航栏效果图2)NavigationView是什么?3)NavigationView和Navigation搭配使用4)NavigationView的其他方法。
2024-08-04 09:20:52 1693
原创 Android进程保活:如何让app一直运行
1)为什么需要进行进程保活呢?需求是什么?2)进程分类3)进程的优先级4)如何提高进程优先级5)如何进行进程保活。
2024-08-02 20:22:23 2055 1
原创 Android 你想更加快速,更加优雅的申请权限?EasyPermissions
AfterPermissionGranted 注解的作用是 , 当请求码对应的权限申请全部通过后,再次回调一次该方法 . ( 相当于调用了两次该方法 )。@AfterPermissionGranted() 注解中使用常量 , 该常量只能使用 const val 定义;并且和requestPermissions 的参数三保持一致。
2024-07-31 08:48:54 1140
原创 Android 性能优化(二):LeakCanary【用于分析代码是否存在内存泄漏】程序无响应
1)内存相关的五种常见问题2)内存溢出和内存泄漏3)LeakCanary是什么?4)LeakCanary如何使用,如何分析?5)LeakCanary监测的内容提问:程序有时候很卡,经常会出现闪退,出现程序无响应,在项目过程中遇到主要的问题我们应该如何解决呢?这篇文章会介绍LeakCanary工具来分析和解决这些问题。
2024-07-29 21:06:03 962
原创 Android 异步编程:RxJava的基本使用以及搭配Retrofit一起使用
Android 异步编程:RxJava的基本使用以及搭配retrofit一起使用。
2024-07-28 12:44:56 689
原创 Android 列表或网格形式展示大量数据:RecyclerView(二):缓存复用
为什么要了解这个呢?当我们rv出现卡顿,出现闪烁的时候,你应该如何优化呢?为什么有时候onCreateViewHolder会被调用?onBindVilewHolder会被调用呢?visiable的使用,会导致重新绘制?
2024-07-28 00:11:43 679
原创 Android ConstraintLayout 约束布局
(1)第一个:删除所有约束布局(2)第二个:自动推断要添加的约束(3)第三个:自动横向,竖向拉伸(3)第四个:设置对齐方式(5)第五个:增加辅助工具,引导线,用于控件的参考对象。
2024-07-27 22:19:19 576 1
原创 Android 列表或网格形式展示大量数据:RecyclerView
RecyclerView.LayoutManager:是RecyclerView的布局管理器类,负责决定子项的排列方式。】这句代码的作用是在RecyclerView中添加一个自定义的装饰器,用于给列表项之间添加分割线,并指定分割线的宽度和方向。RecyclerView:是RecyclerView控件的核心类,用于展示和管理数据。reverseLayout这个参数在某些情况下很有用,比如当需要实现类似聊天界面的消息列表时,可以将reverseLayout设置为true,使得新的消息始终显示在列表的底部。
2024-07-25 20:49:13 1190
空空如也
泛型的上限、下限体现
2017-12-02
TA创建的收藏夹 TA关注的收藏夹
TA关注的人