自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

许进进的博客

学到的知识,要记录;重复的问题,勿再犯。

  • 博客(296)
  • 资源 (12)
  • 收藏
  • 关注

原创 APT最佳学习案例:写个简易版 ButterKnife

目的:写个简易版 ButterKnife,借手写 ButterKnife 去了解如何实现注解、annotationProcessor 的等使用。

2022-12-18 23:26:45 344 6

原创 ConstraintLayout约束布局使用全解

为何:布局扁平化,减少布局层级,即提高性能;约束布局 默认需要一个垂直方向和水平方向的约束;约束布局中的宽高的0dp含义:充满约束宽高:match_constraint:充满父容器约束居中于控件中⼼⽔平⽅向居中垂直⽅向居中居中于控件的边控件垂直居中于 view 的「下边」填充⽔平⽅向填充⽗容器(通过 )备注:在早期版本中 match_parent 没有效果。为⽔平⽅向的控件设置权重,⼤⼩为 2:1:1 。⽂字基准线对⻬圆形定位通过「圆⼼」「⻆度」「半径」设置圆形定位特殊属性

2022-10-30 18:46:49 119

原创 Android Code Review 注意点记录(不断更新~)

也有也有很多review的评论是愚蠢的,或是可以没有。若果与我具备差不多水平的人提出疑问,那么他肯定有一些我没有理解到的想法在里面;在评论中表现得友善,尊重他人的时间和工作,在代码review中吹牛、羞辱或生气没有任何好处。14、注意修饰符:自己写的类中中的一些方法或方法,如果确认仅仅为自己使用,请用private,请不要暴露了,这样有利于降低整个项目的复杂度;7、注意循环内try,不影响下一个item的处理;1、for循环中的remove操作(return、break除外);13、未格式化的代码;

2022-10-17 00:23:32 556

原创 NetViewer-让App的网络请求无所遁形

在Android应用开发过程中,我们经常需要看到网络请求的一些参数信息,包括但不限于get/post方案,返回结果数据,耗时时长等等。通常的做法是在项目的okhttp的build过程中,主动添加一个拦截器用于这些信息的捕捉。但这种方案需要我们自己去在项目中编写拦截器;逻辑进行添加,且无法捕捉三方库或者其他module中的网络请求。在这个背景下,一个可以直接添加使用,并获取全局网络请求返回参数的工具库显得有必要。

2022-10-08 14:01:21 771

原创 Android手把手,发布开源组件至 MavenCentral仓库

有时候,在我们写了一个组件想将之开源给更多人分享和使用时,就需要我们发布开源组件到公开的远程仓库,如 Jitpack、JenCenter 、 MavenCentral。其中,MavenCentral 是最流行的中央仓库,也是 Gradle 默认使用的仓库之一。这篇文章就介绍如何将自己的开源组件发布到MavenCentral仓库中;

2022-09-26 11:00:33 821 1

原创 Android-AGP之手写你的第一款自定义plugin插件

在使用插件的module中,需要在build.gradle中添加apply plugin: '插件名称'因此需要给我们的自定义插件定义一个名称。如何定义插件名称?在src/main/resources/META-INF/gradle-plugins下面新建一个properties文件,文件名称就是我们的插件名称,比如monitor-plugin.properties,插件名称就是"monitor-plugin"。至此,自定义插件的过程就完了。

2022-09-25 21:05:08 502

原创 域名转移:以腾讯云转至阿里云为例

但根据ICANN和CNNIC的规定,域名转移注册商必须将域名的到期日顺延一年,例如,域名原到期日为2016年8月1日,转入成功后,域名到期日为2017年8月1日。域名转入时,必须交纳一年的续费费用,即域名转入价格为域名续费一年的价格。我的是晚上提交的,10分钟不到就通过,还是在周末,在此表扬阿里云的效率!在域名管理页找到需要转出的域名,点击进入【域名信息】,翻到底部【域名转移】,如果是腾讯云账户之间的选择【域名过户】,如果是跨平台的,比如像我这样的需要转到阿里云的选择【转出域名】

2022-09-20 23:49:50 1434

原创 Android:利用sdk中的build-tools对包进行签名

apksigner.jar进行签名,文件目录一般在\Android\Sdk\build-tools\29.0.2\lib中,注意,只有24.0.3及更高版本才会有这个jar工具,这里会默认签v1、v2签名。Android9.0版本及以上会默认签v1、v2、v3签名。如果密钥库有多个别名,则需要指定别名,指定别名给apk签名:apksigner sign --ks keystoreFileAbsolutePath --ks-key-alias aliasName apkAbsolutePath。

2022-09-20 22:54:56 346

原创 Android Gradle 7.x新版本的依赖结构变化

想使用旧的依旧可以在项目build.gradle里面按照原来方式添加,不影响旧方法。

2022-09-07 13:47:03 624

原创 Lottie系列四:使用建议

可能大家会觉得使用位图会导致最终的json过大,Lottie落地失去意义与优势,下方表格是携程火车票最近上线的Lottie动效方案,大家可以从表格对比看出,就算使用位图方案,横向对比现有的解决方案,Lottie依然是优势巨大,原因便是其他方案1s有25帧图片,而Lottie整个动效的文件素材不过10几张,动效时间越长,lottie优势越明显。•推荐使用lottie_rawRes代替lottie_fileName,前者可以通过R使用对动画的静态引用,而不仅仅使用字符串名称;...

2022-07-21 15:11:18 193

原创 Lottie系列三 :原理分析

扩展了ImageView,是加载Lottie动画的默认且最简单的方法。具有与LottieAnimationView相同的大部分API,但是您可以在任何您想要的视图上使用它。组合是动画的无状态模型表示。只要您需要,这个文件可以安全地缓存很长时间,并且可以在drawables/views之间自由地重用。允许您从许多输入创建LottieCompostionFactory。LottieAnimationView继承自ImageView,通过当前时间绘制canvas显示到界面上。这里有两个关键类。...

2022-07-21 15:10:27 133

原创 Lottie系列二:高级属性

要理解如何在 Lottie 中更改动画属性,首先应了解动画属性是如何存储在 Lottie 中的。动画属性存储在一个数据树中,该数据树模仿 After effect 的信息层次结构。在后效果一个组合是一个图层的集合,每个图层都有自己的时间线。层对象有字符串名称,它们的内容可以是图像、形状图层、填充、笔画,或者几乎任何可绘制的内容。后效果中的每个对象都有一个名称。Lottie 可以使用 KeyPath 根据名称查找这些对象和属性。...

2022-07-18 17:10:50 378

原创 Lottie系列一:介绍与使用

Lottie 是一个针对 Android、 iOS、 Web 和 Windows 的库,它可以解析 Adobe After effect 动画,并用 Bodymovin 导出为 json,然后在移动和网络上呈现它们!

2022-07-18 15:12:04 380

原创 git 更改已commit的错误提交信息

amend命令可更改最后一次提交的注释信息:随后,进入vim命令行:vim操作:按 i,在#的最上方删掉错误的描述,然后重新输入注释。按 Esc 按钮退出编辑模式,按 :wq 键,保存并退出即可。

2022-06-27 00:01:51 117

原创 ArrayMap浅记

key-value键值映射的数据结构,相比HashMap内存空间占用更少(内存管理效率高);Android提供了内存效率更高的ArrayMap,解决HashMap更占内存的弊端;**ArrayMap是Android专门针对内存优化而设计的,用于取代Java API中的HashMap数据结构。为了更进一步优化key是int类型的Map,Android再次提供效率更高的数据结构SparseArray,可避免自动装箱过程。对于key为其他类型则可使用ArrayMap。**HashMap的查找和插入时间复杂度为O(

2022-06-26 23:51:18 460

转载 深度解读ArrayMap优势与缺陷

ArrayMap经典文章:深度解读ArrayMap优势与缺陷;在移动设备端内存资源很珍贵,HashMap为实现快速查询带来了很大内存的浪费。为此,2013年5月20日Google工程师Dianne Hackborn在Android系统源码中新增ArrayMap类,从Android源码中发现有不少提交专门把之前使用HashMap的地方改用ArrayMap,不仅如此,大量的应用开发者中广为使用。然后,你是否研究过这么广泛使用的基础数据结构存在缺陷?要回答这个问题,需要...

2022-06-26 23:49:08 252

原创 Flutter 开启web构建以及web的两种渲染模式

Flutter 开启web构建以及web的两种渲染模式~

2022-06-26 22:43:07 1154

原创 Android-页面点击事件拦截替换方案

在一些特定页面中,绝大部分的布局填充内容是复用的UI卡片(组件),这些卡片(组件)在≥2个页面中提现的点击事件可能会随着不同的页面而有不同的响应事件。在类似这种背景下,一些简单常规的做法:对不同的view中设置不同的点击事件;页面的差异化导致的点击事件的差异化可通过传参或内部判断的方式进行;上述做法潜在的问题是:在这种背景下,提出了一种白名单 + 点击事件拦截的方案,旨在对页面中view的点击事件做拦截,替换成目标事件,而对想保持原响应事件的view进行放过。主要源码可直接翻到最后。在view设置点击事件的

2022-06-12 19:13:34 345

原创 Flutter异常:Exception in thread “main“ java.util.zip.ZipException: zip END header not found

新建的Android - Flutter项目,运行直接报错:Exception in thread "main" java.util.zip.ZipException: zip END header not found at java.base/java.util.zip.ZipFile$Source.zerror(ZipFile.java:1573) at java.base/java.util.zip.ZipFile$Source.findEND(ZipFile.java:1468) at

2022-04-06 23:54:46 5500

原创 Web前端下载文件的几种常见方式

1 标签or点击事件标签下载<a href="xxxxx">或<a href="xxxxx" download="xxxx">href:文件的绝对/相对地址download: 文件名(可省略,省略后浏览器自动识别源文件名)Tip:跨域情况下,不能下载浏览器可浏览的文件,例如图片。兼容性问题,老的浏览器不支持。不能进行鉴权。通过点击事件下载function download(url, fileName){ const a = document.

2022-03-27 00:10:35 3396

原创 华为云主机安全防护的新发现

最近打算上一个新app了,部署服务器的时候突然看到华为云的新用户还送1080(+432)的安全防护,这就简直了啊,当然,一般个人的可能用不到这个,除非对安全层面要求比较高。之前由于公司产品的业务性质,需要等保备案,当时愁的我前后端一手抓,检测报告上百个问题,直接把我整蒙逼了。。。光买阿里云的安全防护就得w起步。现在实行的网络安全等级保护制度,把保护对象分为五个级别,由一到五级别逐渐升高,每一个级别的要求存在差异,级别越高,要求越严格,三级等保已经是民营最高等级的防护认证了。现在想想,之前大学那会

2022-01-21 15:15:30 2328

原创 真懂?Retrofit完整剖析

文章目录使⽤示例实现原理接口的合规验证自定义api的动态代理如何创建的OKHttp如何解析返回结果返回的UI线程切换原理参考使⽤示例以下Retrofit解析版本库均为写作时的最新版本:2.9.0。先在安卓的构建文件中添加依赖: implementation 'com.squareup.retrofit2:retrofit:2.9.0'使用步骤:创建⼀个 interface 作为 Web Service 的请求集合,在⾥⾯⽤注解(Annotation)写⼊需要配置的请求⽅法public i

2021-12-22 13:34:21 1765 13

原创 OkHttp源码剖析(五) 代理路由

OkHttp源码剖析(一) 初识okhttpOkHttp源码剖析(二) 设计模式下的okhttpOkHttp源码剖析(三) 任务调度器DispatcherOkHttp源码剖析(四) 报文读写工具ExchangeCodecOkHttp源码剖析(五) 代理路由缘起:需要一个connection由前面几章知识可知,拦截器ConnectInterceptor会经过ExchangeFinder.findConnection(), private fun findConnection(...): Rea

2021-10-24 15:28:10 3453

原创 技术/研发经理介绍和创业的一些感想

技术/研发经理介绍和创业的一些感想国庆过后,最终还是做出了决定,告别兄弟们,离开这家呆了两年多的创业公司。作为最早期的核心人员,我经历了公司项目从零搭建,上线,迭代,最终作为某国家级考试指定平台的整个历程。不过老实说,公司过的并不好,几轮融资的失败,原始股东信心的逐渐下降,资金始终是最头大的问题。作为技术,融资不是我们所能左右的,但是回顾过去,还是想记录一些学习到的知识,主要是对技术经理这个职位的介绍,以及我的经历和感想,希望和大家交流。技术经理、技术总监、CTO首先可能还是有人不清楚技术经理、技术总

2021-10-11 20:46:53 3601 5

原创 java中的IO、NIO、Okio

java IO写这种写方法只能一个字节一个字节的写;注意把要关闭的流写在try括号中,省去了代码中finally关闭的过程,以下例子均是。private static void ioWrite() { try (OutputStream outputStream = new FileOutputStream("./demo.txt")) { outputStream.write('a'); outputStream.write('b'); } catch (F

2021-10-10 17:48:17 399

原创 OkHttp源码剖析(四) 报文读写工具ExchangeCodec

概念明确codeccodec是网络报文交互的读写工具。用途:encode HTTP 请求,decode HTTP 响应 。codec通过健康连接创立,它不仅包含编码接码算法,也包含可用的健康连接,只需要往codec写东西就可以发请求,向codec读东西可以拿到返回的报文信息。ExchangeExchange 是网络报文交互的读写管理员,内部调用 codec去进行读写操作。传送一个 HTTP 请求和响应对,该层连接管理和 ExchangeCodec(实际处理 I/O) 的事件。源码分析获取c

2021-10-07 17:30:51 238

原创 Android热更新详解

一 前言介绍正好最近又看到热更新,对以前Android 热修复核心原理:ClassLoader类加载机制做了点补充。从16年开始开始,热修复技术开始在安卓界流行,它以classloader类加载机制为核心,可以不发布新版本就修复线上 bug ,让线上版本有能力去进行全量或者增量更新。常见的思路有两种:类加载方案,即 dex 插桩。该方案以腾讯系为主,包括微信的 Tinker、饿了么的 Amigo;底层替换,即修改替换 ArtMethod。方案以阿里系的 AndFix 等为主;本文主

2021-09-21 14:51:05 6735 13

原创 java中的多线程:线程使用、线程安全、线程通信

Java中的多线程使用Thread: Thread thread = new Thread() { @Override public void run() { System.out.println("Thread started!"); } }; thread.start();Thread类的几个常用的方法:sleep():静态方法,使当前线程睡眠一段时间;currentThread():静态方法,返回对当前正在执行的线程对象的引用;sta

2021-09-13 21:38:07 236 1

原创 LRU算法的今生前世&LruCache在Android中的实现

操作系统中的起源缓存文件置换机制现代语言的很多特性都可以在操作系统中找到最初的原型,LRU我们最早也可以在操作系统中找到当初的设计。“高速缓存是计算机科学中唯一重要的思想” -Bill Joy我们知道,无论是内存还是硬盘,又或者是我们在各自应用中用到的cache,由于大小固定,因而总会面临空间不足,而需要进行缓存置换(or替换),而替换的原则被我们称为缓存文件置换机制。而今天聊得主题就是:最近最少未使用算法(LRU),即最久没有访问的内容作为替换对象。页面置换算法操作系统中,我

2021-09-07 13:47:49 1541 3

原创 OkHttp源码剖析(三) 任务调度器Dispatcher

DispatcherOkHttp 对异步请求的线程池主要依赖Dispatcher来实现。Dispatcher是用于调度后台发起的网络请求的调度器, 有后台总请求数和单主机总请求数的控制。每个Dispatcher调度器都有一个 ExecutorService, 通过java excutor实现,在内部运行调用,用于真正执行call。分析一下Dispatcher的几个参数:maxRequests最大请求数:64maxRequestsPerHost 每个 host 最大请求:5readyAsync

2021-09-02 10:16:36 1235

原创 Android EditText使得输入默认两位小数

val textWatcher: TextWatcher = object : TextWatcher { override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) { var s = s if (s.toString().contains(

2021-08-26 15:46:50 1805

原创 OkHttp源码剖析(二) 设计模式下的okhttp

OkHttp的源码中存在着很多常见的设计模式,比如工厂模式(Call.Factory、WebSocket.Factory、CacheInterceptor中的CacheStrategy.Factory等)、外观者模式(OkHttpClient)等,但OkHttp最明显最重要的是三种模式:建造者模式、责任链模式和享元模式。建造者模式定义:将复杂对象的构建与表示分离。建造者模式将一个复杂对象的创建过程封装起来,允许对象通过多个步骤来创建,在对象特别复杂,内部参数很多时,建造者模式就能发挥出它的优势。若源码

2021-08-24 16:17:22 1945

原创 OkHttp源码剖析(一) 初识okhttp

使用示例本篇主要基于okhttp-4.9.0进行分析。下面是OkHttp主要的使用示例。 OkHttpClient client = new OkHttpClient.Builder().build(); Request request = new Request .Builder() .url("https://www.yanfriends.com") .build();

2021-08-24 16:06:23 1921

原创 即使没能写出OkHttp,也请务必知道的Http知识!

文章目录1 HTTP 概念/定义2 TCP/IP协议族体系结构以及主要协议3 HTTP 的工作机制/原理B-S:C-S:4 代理(Proxies)5 HTTP基本性质:6 URL 和 HTTP 报文URL 格式请求报文格式:响应报文格式:7 Request Method 请求方法1 GET2 POST3 PUT4 DELETE8 Status Code 状态码9 HeaderHostContent-Type1. text/html2. x-www-form-urlencoded3. multipart/fo

2021-08-16 22:45:13 4471

原创 Android-命令行中利用JDK签名应用

Android平台发布应用程序之前,必须经过一个签名流程。现在您的密钥就是您的身份证明,您所要做的就是使用您的密钥,将未经过签名的apk包签名,然后再进行发布。jarsigner简单使用说明jarsigner -verbose -keystore ~/Workspace/mykeystore -signedjar ./meizuemptyapk-release-signed.apk ./meizuemptyapk-release-unsigned.apk meizu给apk包签名的方式有..

2021-07-02 14:12:34 4537

原创 Android 新建module时的ByteCode Level

在升级

2021-06-15 11:40:43 6962 1

原创 Centos8从零部署上线Django后台

本机环境:CentOS 8.3 64位一 环境安装1.1 mysql#下载wget https://dev.mysql.com/get/mysql80-community-release-el8-1.noarch.rpm#安装数据源 yum install mysql80-community-release-el8-1.noarch.rpm#检查数据源yum repolist enabled | grep "mysql.*-community.*"#禁用CentOS8自带mys.

2021-06-10 12:04:45 4573 1

原创 Android小技巧之View控件圆角弧度设置

// 设置View圆角radius fun setRadius(view : View, radius:Float){ view.run { outlineProvider = object : ViewOutlineProvider() { override fun getOutline(view: View, outline: Outline) { // 设置圆角率为 ...

2021-05-27 22:13:02 7069

原创 Vue 监听属性、计算属性、其他属性与方法

目录1 监听属性 watch2 计算属性 computed2.1 计算属性传参方式-闭包3 `watch`、`computed`和`methods`之间的对比4 其他属性与方法1 监听属性 watch<div id="app"> <input type="text" v-model="firstName"> + <input type="text" v-model="lastName"> = <span>{

2021-04-16 14:22:32 4597 1

原创 Bert笔记

Bert成为自然语言处理的通用解决方案序列网络模型:seq2seq网络 核心一般用rnn传统的不足:RNN 每一项需要前一项的数据 无法加速并行训练Transformer可以transformer 取代 rnn了传统词向量不变,不会因为上下文不同而改变,这是不足,因为事实上,同一个词在不同语境中含义其实不尽相同、self attention: 一个词在编码时不仅仅考虑该词,而是会把上下文的信息也考虑进去进行编码self attention如何计算: 三个需要训练的矩阵:Q..

2021-04-15 17:46:58 4492

神经网络预测天气的气温数据集

神经网络预测天气的气温数据集,包括了:year,moth,day,week分别表示的具体的时间;temp_2:前天的最高温度值;temp_1:昨天的最高温度值;average:在历史中,每年这一天的平均最高温度值;actual:这就是我们的标签值了,当天的真实最高温度;friend:这列用不到暂不用管

2020-08-12

大傻串口调试软件5.0

大傻串口调试软件5.0

2016-06-12

CH340驱动(USB串口驱动)_XP_WIN7共用

CH340驱动(USB串口驱动)_XP_WIN7共用

2016-06-12

汉字取模软件

汉字取模软件

2016-06-12

第9天资料 大作业串口接收打印多行 并且有二维码打印n行

第9天资料 大作业串口接收打印多行 并且有二维码打印n行

2016-06-12

第4天作业答案.按键控制吐纸

第4天作业答案.按键控制吐纸

2016-06-12

exg10.第5天作业答案.按键打印多个汉字

exg10.第5天作业答案.按键打印多个汉字

2016-06-12

STM32 -步进电机控制程序

STM32 -步进电机控制程序,用keil5进行开发。

2016-06-12

STM32中文参考手册_V10

本文档是依据STM32 Reference Manual (RM0008)翻译的,已经与2009年6月的英文第9版(Doc ID 13902 Rev 9)进行了全面校对,更正了不少以前版本的错误。

2016-06-12

stm32固件库v3.5建工程_信盈达20160512

软件环境: 1. 安装 Keil uVision5 MDK 软件到电脑上。 2. 安装 J-link 调试下载器驱动到电脑上。 3. 下载 STM32-V3.5 的固件库,论坛上很多。

2016-06-12

车库管理系统C源码-基于s5pc100

项目名称:智能停车系统 平台:arm soc:s5pc100 os: linux 知识点:c, linux, 进程,线程,网络,数据库, arm, 驱动

2016-05-27

微信index文件

直接复制到服务器上微信关注就可,是微信公众号服务开发实验的基本原始源码之一。

2015-03-15

空空如也

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

TA关注的人

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