- 博客(107)
- 资源 (11)
- 收藏
- 关注
原创 致Zr.孜然阅读器的开发过程(纪念)
致Zr.孜然阅读器的开发过程主要原因 第一时间想知道最新的主题订阅资讯 迫切想证实自己是否具备独立开发能力 一种对已知技术知识汇总后的结晶 不想故步自封,屹立在原地,随着时间的推进,而逐渐被后退主要目标 对于应用开发流程更深入思考其存在的前后关系,存在与否的取舍。 对于技术知识系统化的积累与沉淀 理解对...
2018-03-14 09:49:37 1082 1
原创 Kotlin高阶函数与Lambda表达式及内联函数的介绍
高阶函数就是将函数类型用作参数或返回值的函数。举例说明,看看高阶函数到底长什么样子。最简单的理解就是写在大括号里面的代码段,与匿名内部类写法非常类似。内联函数主要涉及到三个关键字:inline(内联) ,作用于函数;noinline(禁止内联),作用于函数类型的参数;crossinline(限制lambda表达式直接调用 return,导致程序执行[逻辑异常],作用于函数类型的参数。
2024-09-07 19:49:19 954
原创 Android插件化技术之加载未安装APK
Android插件化是一种解决方案,当一个应用发展成一个平台级应用时,就更需要针对各个子业务模块按需动态加载,要做到按需动态加载一种是可以通过H5的方案,另一种就是针对各个子业务模块单独开发成一个APK,这时候这个平台级应用我们称为宿主,子业务模块APK称为插件,宿主通过反射点击去学习、代理点击去学习等实现hook技术来完成插件APK的免安装加载。所以必须要先了解这个HOOK技术。HOOK翻译成钩子,钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。在Android系统中,通俗来讲,就是去阅读
2024-08-28 21:41:05 1122
原创 日期格式化字符说明
Thu, 18 Jan 2024 09:57:58 GMT-8这种少见的日期格式化,及说明EEE, d MMM yyyy HH:mm:ss 'GMT-8'这个类格式字符的含义
2024-01-18 16:26:52 1490
原创 桌面小部件(Appwidget)的列表ListView点击启动Activity失败的解决方案
Android桌面小部件,点击listView列表项,无法打开Activity的问题解决办法。
2024-01-08 16:15:33 657
原创 05鸿蒙APP开发之加载网络列表
为了请求网络列表数据,实现动态加载。官方的DEMO封装得太深,看不出最简化的结构。基于这些原因,开始写下本篇博文,内容主要包含,网络请求封装、发起请求,及页面渲染。
2023-12-21 18:13:18 1586
原创 03鸿蒙ArkTS应用开发及ArkTS语言学习
当我们在新建一个鸿蒙应用工程项目时,会要求你选择模型,能使用ArkTS开发语言。未知的一切,还在探索中。
2023-12-15 17:42:20 1871
原创 02鸿蒙APP真机运行及证书签名打包
整个签名到打包的过程确实很漫长,4个签名相关的文件创建就要费九牛二虎之力,还需要开发者账号才可以做鸿蒙开发,所以门槛还是存在,遇到失败多尝试,总会解决。
2023-12-13 18:02:17 4193
原创 Chrome浏览器关闭左上角搜索标签页的解决办法
最近升级到版本 119.0.6045.124(正式版本) (64 位),发现左上角莫名多了一个搜索标签页的图标,看着有点多余,可把它关掉,方法如下...
2023-11-09 10:53:31 19908 25
原创 Android经典蓝牙与低功耗蓝牙开发相关知识
Android蓝牙开发目前涉及到4.0以下及以上的蓝牙协议,随着低功耗蓝牙(BLE)越来越应用普遍,最新的设备厂商已使用蓝牙协议5.2版本,而经典蓝牙和低功耗蓝牙开发方式完全不同,所以需要针对性的做开发,同时也会涉及到一些小坑,需要特别注意。
2023-09-08 16:25:10 1815
原创 Java按位取反操作~
计算机存储的整型数据是存储的2进制,而此2进制并不是此10进制数直接对应的2进制数(原码),而是存储的此2进制数的补码。所以,取反(~)是对补码的按位取反操作,而要从原码转换成补码,必须要先从原码转换成反码,再从反码转换成补码才可以。注意:2进制的最高位是符号位(在最左侧)
2022-11-10 14:00:57 2023 1
原创 Android字节码ASM插桩
目录1、字节码ASM插桩到底什么意思?1.1、字节码1.2、ASM1.3、插桩2、插桩到底有什么用?3、怎么才能实现插桩呢?第一步:新建moudle第二步,配置属性文件和插件模块的build.gradle:第三步,编写对应的插件注入类,及类和方法访问器:第四步,上传插件库到本地maven仓库,方便主项目引用:第五步,配置主项目的MyAmsTest/app/build_gradle及MyAmsTest/build_gradle文件第六步,在主项目中编写被用于插桩的测试类:第七步,在启动Activity中正常使
2022-03-08 12:12:20 4064
原创 MutableLiveData实现消息订阅源码分析
目录1、创建MutableLiveData对象2、添加消息订阅3、发布消息3.1、setValue的具体实现3.2、postValue的具体实现4、总结1、创建MutableLiveData对象MutableLiveData翻译为可变实时数据创建一个针对List< MonitorTree >列表的对象如下: var monitorTree = MutableLiveData<List<MonitorTree>>()现在看看MutableLiveData的源码
2021-11-08 17:11:05 1078
原创 Android中正确使用Rsa加密算法
在Android中使用和在java程序中使用Rsa有些许区别,如,没有BASE64Decoder这个类等等...
2021-11-02 16:00:38 829
原创 Git标签(tag)的用法
1、在本地为当前最新提交的代码打上标签git tag -a v1.1 -m '版本介绍'2、推送标签到远程服务器上git push origin v1.13、查看标签查看所有标签:git tag按照关键字查看,其中 v1.* 就是类似模糊匹配的关键字:git tag -l "v1.*"4、为早期的提交补打标签先查看日志git log --pretty=oneline可能会遇到中文无法识别的问题,如下图所示的乱码:可以执行如下命令解决:git config --glob
2021-08-13 12:13:21 2662
原创 快速排序算法重新梳理
文章目录1、梳理背景2、算法原理第一步:先从右往左查找第二步:在从左往右查找第三步:交换值第四步:左右相遇第五步:继续递归调用重复上面的123步骤关键核心点:3、时间复杂度4、空间复杂度5、源码实现6、图片演示1、梳理背景最近在查阅关于快速排序算法的相关实现,发现关于算法原理、源码实现出现不同的变种版本,个人觉得有些版本不好理解,有些版本更易于理解。参考了各种不同的版本,通过自己实践,最终将此算法的原理、及源码实现进行了全新的梳理,更易于掌握。2、算法原理给定一个数字类的数组(arr[]),选定一个
2021-06-08 15:49:15 456
原创 RecyclerView实现空视图切换
实际的业务需求中:无列表数据的时候,我们希望显示一个空视图布局,以方便用户直观理解;而当有数据时,则正常加载列表数据。这样就形成了一个有数据和无数据的布局切换。基于此,本文提供了一种解决方案。
2021-04-20 09:35:53 704
原创 Retrofit @Multipart@PartMap@Part组合的一种用法
目录1、应用场景2、实现2.1、api的声明写法2.2、实际调用3、总结1、应用场景有这样一个需求:要实现附件与字符串参数同时提交请求。附件可能是多个,字符串参数也可能是多个。2、实现2.1、api的声明写法只实现多文件上传,处理方式如下: @Multipart @POST("api/uploadFile") fun uploadFiles( @Part parts: List<MultipartBody.Part> ): Call<R
2020-10-26 18:25:58 5731
原创 重学数据结构之第九章-排序
目录1、概述2、排序算法2.1、冒泡排序2.2、简单选择排序2.3、直接插入排序2.4、希尔排序算法2.5、堆排序2.6、快速排序算法3、算法的各项指标1、概述排序这一章主要是讲解了常用的一些算法,我们在选择用何种排序算法的时候可以根据时间复杂度来判断,文末会给出一个算法的时间及空间复杂度的表,方便决策。2、排序算法2.1、冒泡排序主要是分为三个版本,初级版,改进1,改进2。我们在实际应用时,直接使用改进2即可。初级版: /** * 冒泡排序初级版本 * 相邻比较
2020-10-08 18:24:27 213
原创 重学数据结构之第八章-查找
本章主要是各种算法,主要分为有序查找和无序查找。1、有序查找main调用 public static void main(String[] args) { int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; int[] arr2 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; int[] arr3 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; int
2020-10-08 05:05:54 229
原创 重学数据结构之第七章-图
1、图的定义图(Graph)是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),其中,G表示一个图,V是图G中顶点的集合,E是图G中边的集合。图是一种较线性表和树更加复杂的数据结构。在图形结构中,结点之间的关系可以是任意的,图中任意两个数据元素之间都可能相关。其中我们要明确的几个地方:线性表中我们把数据元素叫做元素,树中将数据元素叫结点,在图中,数据元素我们称之为顶点(Vertex)线性表中可以没有数据元素,称为空表。树中没有可以没有结点,叫做空树。那么对于图中则不能没有顶
2020-10-06 23:49:08 1278
原创 重学数据结构之第六章-树
1、树的定义树(Tree)是n(n>=0)个结点的有限集。当n=0时,称为空树。在任意一棵非空树种:(1)、有且仅有一个特定的称为根的结点(Root);(2)、当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1、T2、…、Tm,其中每一个集合本身又是一棵树,并且称为根的子树(SubTree)。如下图所示:本书中还是少了一些有关红黑树的概念。树有很多概念和定义需要我们去理解记忆。1.1、树结点分类树的结点包含一个数据元素及若干指向其子树的分支。结点拥有的子树称为
2020-10-05 22:21:48 1022
原创 重学数据结构之第五章-串
1、定义**串(string)**是由零个或多个字符组成的有限序列,又名叫字符串。零个字符的串称为空串。计算机中常用字符是使用ASCII编码,更准确一点,由7位二进制数表示一个字符,总共可以表示128个字符。后来发现一些特殊符号的出现,128个不够用,于是扩展ASCII码由8位二进制数表示一个字符,总共可以表示256个字符,这已经足以满足以英语为主的语言和特殊符合进行输入、存储、输出等操作的字符需要了, 可是,单我们国家就有除汉语以外的其他少数名族文字,换做全世界估计要有成百上千种语言与文字,显然25
2020-10-04 19:19:29 233
原创 重学数据结构之第四章-栈与队列
1、栈的定义2、栈的两种存储结构2.1、顺序存储结构2.1.1、进栈2.1.2、出栈2.2、链式存储结构2.1.1、进栈2.1.2、出栈3、栈的应用-斐波那契的递归函数3.1、迭代法3.2、递归法3.3、对比两种实现方法4、队列的定义4、队列的两种存储结构2.1、顺序存储结构2.1.1、出队2.1.2、入队2.2、链式存储结构2.1.1、出队2.1.2、入队5、总结栈和队列它们都是特殊的线性表,只不过对插入和删除操作做了限制。栈(stack)是限定仅在表尾进行插入
2020-10-03 22:42:46 435
原创 重学数据结构之第三章-线性表
线性表:零个或多个数据元素的有限序列。几个关键点:首先它是一个序列,元素之间是有顺序的,若存在多个元素,则第一个元素无前驱,最后一个元素无后继,其他每个元素有且只有一个前驱和后继。前驱和后继后续文章中也会提到,就是指的前一个数据元素和后一个数据元素,只是简化了叫法。
2020-10-02 21:26:36 679
原创 重学数据结构之第二章-算法
1、算法定义算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。2、算法的启示举个例子,求1+2+3+…+100之和,我们来看两段代码:代码片段1:int sum = 0,n = 100;for(int i = 1 ; i < n ; i ++){ sum += i;}//sum结果5050system.out.println(""+ sum);代码片段2:int sum = 0 , n = 100;sum = ( 1 +
2020-10-01 18:59:40 302
原创 重学数据结构之第一章-数据结构绪论
目录1、数据结构的定义是什么?2、数据结构是怎么起源的?3、数据结构中我们必须要掌握哪些概念和术语?3.1、 数据3.2、数据元素3.3、数据项3.4、数据对象4、数据结构到底有那些结构?4.1、逻辑结构4.1.1、集合结构4.1.2、线性结构4.1.3、树形结构4.1.4、图形结构4.2、物理结构4.2.1、顺序存储结构4.2.2、链式存储结构5、抽象数据类型1、数据结构的定义是什么?数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。2、数据结构是怎么起源的?数据结构是一门研究非数值计算
2020-10-01 13:19:33 185
原创 Kotlin中的协程
目录1、协程是什么2、协程与线程的区别3、如何在Kotlin中使用协程4、协程使用场景5、总结1、协程是什么协程是程序中处理并发任务的一种方案,同时也是这种方案的一个组件。 提示:kotlin已集成了此框架。2、协程与线程的区别协程与线程是属于一个层级的,但是却又和线程处理并行任务有着不同的解决方案,协程可以在处理完并发任务之后,自动切回UI(mian/主)线程;协程的调用案例: GlobalScope.launch(Dispatchers.Main) {
2020-09-23 12:58:23 1121
原创 (实战)基于MVVM+Kotlin+AAC架构之登录模块
互联网技术飞速发展的是时代,在Android领域从早期的MVC架构发展到现在的MVP、MVVM架构,开发语言也从Java语言,到新崛起的Kotlin语言,甚至是Flutter工具包所使用的跨平台Dart语言,一门新技术、新语言的出现总是需要不断的迭代,使之变得更为成熟才能更好的运用到实际项目中。时至今日,MVVM+Kotlin+AAC组合架构已经变得越来越广泛使用...
2020-08-13 18:24:59 1079
原创 Kotlin的基础用法
1、概述“如果你正在为Android开发寻找一种替代编程语言,那么应该试下Kotlin。它很容易在Android项目中替代Java或者同Java一起使用。”–Hathi
2020-07-24 16:28:28 486
原创 泛型
1、定义泛型是java1.5版本引进的概念。有两种定义:1、在程序编码中一些包含类型参数的类型,也就是说泛型的参数只可以代表类,不能代表个别对象。2、在程序编码中一些包含参数的类。其参数可以代表类或对象等等。不论使用哪个定义,泛型的参数在真正使用泛型时都必须作出指明。上面两种定义不是很好理解,个人理解的话,想象成可以在定义时替代整型、字符串类型、对象类的一个集合代表类。2、常用术语2.1、类型擦除下面这段代码,会输出什么? List<String> sList = ne
2020-06-29 16:54:38 324
原创 反射
1、定义百度百科:Java的反射(reflection)机制是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法。这种动态获取程序信息以及动态调用对象的功能称为Java语言的反射机制。反射被视为动态语言的关键。维基百科:反射指计算机程序在运行时(runtime)可以访问、检测和修改它本身状态或行为的一种能力。[1]用比喻来说,反射就是程序在运行的时候能够“观察”并且修改自己的行为。Java的反射机制的实现要
2020-05-11 16:44:57 235
原创 多线程环境下CountDownLatch的用法
1、概述谷歌直译:倒数计时还有一些其他翻译:计数减小门闩,倒计时闩锁CountDownLatch类所在的包路径: java.util.concurrent.CountDownLatch一种同步辅助类,它允许一个或多个线程等待,直到在其他线程中执行的一组操作完成为止。使用场景:在主线程中创建多个子线程,等待所有子线程执行完成之后,再切换到主线程等待位置并往下继续执行。2、关键方法、函数...
2020-04-24 15:27:14 581
原创 (十九)Python中级知识-正则表达式(re模块)
1、概述正则表达式(英语:Regular Expression,常简写为regex、regexp或RE),又称正则表示式、正则表示法、规则表达式、常规表示法,是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。许多程序设计语言都支持利用正则表达式进行字符串操作。同样,在python中就内建了一个功能强大的正则表达式引擎。我们在普通的操作中已经可以拼接追...
2020-04-14 16:25:09 285
原创 Git分支管理
1、查看远程分支git branch -r2、查看本地分支git branch3、查看本地和远程分支git branch -a4、新建一个本地分支git branch develop其中develop为新建的分支名称,可自己修改。5、将本地分支推送到远程分支git push origin develop其中develop为需要推送到远程的分支名称,可自己修改。6、...
2020-04-05 10:31:38 256
android webview实用demo
2014-10-23
私人文件加解密小软件
2014-02-19
Oracle11G数据库服务端客户端数据库创建详细教程
2014-01-26
全盘遍历查找文件(多线程)
2013-10-16
送女友示爱生日祝福浪漫小程序
2013-09-09
mono开发的天气预报app
2013-09-09
生日快乐 送女友源代码 小惊喜
2013-09-09
DataGridView设置列头,动态加载数据源,动态改变颜色
2013-08-23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人