自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

金福林的博客

命运不仅在于努力,还在于选择。。。十年后,我们会如何看待今天的选择?

  • 博客(171)
  • 资源 (3)
  • 收藏
  • 关注

原创 MpAndroidChart自定义Fling手势

我们知道MpAndroidChart的k线是不支持fling效果的,如果我们要加一个fling效果可以在BarLineChartTouchListener添加如下方法://///////////////////////start----处理fling事件----start/////////////////////////////////////////////////// private Fling fling; //创建一个用于识别收拾的GestureDetector对象waiyuwu

2022-03-14 09:07:12 309

原创 一句话解决面试题--安卓篇

1.生命周期相关1.1 A activty跳转B activity走了哪些生命周期函数?A:pauseB:create Start resumeA:stop拓展:如果B的启动模式是sigletask/singleInstance且在任务栈中B:create start onNewIntent resumeA: stop1.2 B finish关闭返回AB:pauseA:restart start resumeB:stop destory1.3 此时按下home键又返回A: stop

2022-02-14 10:19:34 651

原创 一句话解决安卓面试系列--java篇

文章目录一。 基础问题1.Java中 == 和 equals 和别:二。面向对象相关1.什么是多态?2.接口和抽象类?学习时间:学习产出:一。 基础问题1.Java中 == 和 equals 和别:1. 没有复写就没区别,object中equals实现的就是==2. 有些类会复写equals方法,比如string就是会判断每个字符是否相等。ArrayList通用会判断每个子item是否相等。二。面向对象相关1.什么是多态?多态,是事务运行中的多种状态,一般指的是方法多态,即同名方法的不

2022-01-22 21:27:54 445

原创 安卓泛型的使用

文章目录前言一、泛型定义的初始化位置1.类2.接口3.方法二、泛型定义的限制类型(extend)三、泛型使用时的不确定类型声明(通配符 ' ?')前言我们为什么需要泛型?在JDK1.5之前是没有泛型的,其实这也并不影响我们的正常功能开发,但是我们需要用到大量的类型强制,运行时一旦强转错误就是导致程序崩溃,那么能不能在编译时就把这些检查做好呢?答案就在泛型中。所谓“泛型”,就是“宽泛的数据类型”,任意的数据类型。java中的泛型是语法糖,只存在编译阶段。泛型最主要的作用就是通过指定参数类型,.

2021-12-05 13:51:00 936

原创 安卓mvp与mvvm怎么选?

文章目录mvpmvvm怎么选?未来趋势?mvpMVP架构其实可以说与MVC的优化,传统安卓的mvc中controller中任务太重,其实我们最开始开发过程中,也会把代码量较大的controller抽取一部分代码到业务工具类中,其实就是p层的雏形,只不过mvp架构把如何抽取规范化了。在mvp中,view视图层,代表Activity;p层,接口请求层。mvp可能导致内存泄漏,但是我们可以规避。mvvmmvvm是双向数据绑定,viewmodle是连接view和modle的桥梁。它在前端工程中使

2021-12-05 09:26:19 1407

原创 安卓mvp进阶封装实践

文章目录前言二、Base基础包封装三. Contract契约类封装4.使用总结前言说到 MVP ,大家应该都不陌生了,它比MVC逻辑更清晰,解耦更好,比MVVM使用要简单。但是它也有自己的缺点,比如要增加很多接口,可能导致内存泄漏,需要显示的初始化等等,这次我们就基于泛型对mvp封装一把,希望这是你理想中的效果# 一、基本结构二、Base基础包封装代码如下(示例):public interface BaseView { boolean isAlive();}public

2021-12-04 19:27:41 2212

原创 安卓Jetpack组件系列一之Lifecycle

文章目录前言1.什么是Jetpack?2.Jetpack组件库有哪些?一、Lifecycle简介二、使用步骤总结前言1.什么是Jetpack?Jetpack是众多组件的集合,是谷歌推出的一套引领开发规范的架构。我们看安卓开发者官网,jiepack已经与AndroidStudio、Kotlin同级别的地位上,可见谷歌对其重视程度。2.Jetpack组件库有哪些?Jetpack组件库目前有八十多种,而且还在持续增加中,不过这里面有些组件可能是我们非常熟悉的,比如Activity、Fragment

2021-11-28 17:28:36 1797

原创 安卓沉浸式状态栏,android沉浸式状态栏工具类封装

文章目录前言二、使用步骤1.定义2.使用3.效果前言沉浸式状态栏对安卓6.0以上版本很简单,今天分享一个封装好的工具,供大家参考二、使用步骤1.定义代码如下:package com.example.mystudy_kotlin.utilsimport android.app.Activityimport android.graphics.Colorimport android.os.Buildimport android.view.Viewimport android.view.

2021-11-28 16:05:36 1467

原创 安卓静态代理、动态代理以及仿retorfit实现

文章目录什么是代理?一、静态代理三、仿retorfit实现动态代理什么是代理?代理模式其实就是我实现你的方法代替你去做某件事 为啥要这么麻烦呢!!!其实是为了不去修改原有的代码,通过代理也可以访问这个对象而且可以进行扩展代理分为静态代理和动态代理,主要用于我们不想修改原本的实现逻辑,却想再原本实现逻辑上做拓展静态代理:实现被代理类的接口,重新需要代理的方法使用场景:比如我们想对所有的某些click统计点击事件耗时,就可以使用静态代理方式实现。retrofit通过动态代理获取到方法上的

2021-11-27 21:29:20 1125

原创 Arouter用法及原理2:源码介绍

文章目录前言一、开发阶段(arouter-annotation)二、编译阶段(arouter-compiler)三、运行阶段(arouter-api)四、运行加速(arouter-register)前言我把Arouter分为开发阶段、编译阶段和运行阶段,分别对应的arouter的三个依赖包一、开发阶段(arouter-annotation)arouter-annotation主要定义了注解以及相关参数供我们使用二、编译阶段(arouter-compiler)arouter-compil

2021-11-21 16:24:11 1472 1

原创 Arouter用法及原理1:基本用法

文章目录前言一、添加依赖和配置二、使用步骤1.初始化2.普通跳转Activity2.拦截器2.自定义全局降级策略总结前言组件化被越来越多的Android项目采用,而作为组件化的基础——路由也是重中之重。本篇文章将详细的分析阿里巴巴开源的路由框架ARouter。本文将从基本用法和原理介绍Arouter。一、添加依赖和配置android { defaultConfig { ... javaCompileOptions { annot

2021-11-20 23:50:58 1407

原创 安卓api compile implementantion apt kapt annotationProcessor有什么区别?

你可能经常在build.gradle文件中看到,这样的字眼,annotationProcessor、android-apt、Provided,它们到底有什么作用?compile(旧)== api(新) api关键字引入的包对于其他Module来说是可见的implementation implementation关键字引入的包对于其他Module来说是不可见的apt(旧)===annotationProcessor(新) 用于引入注解包 从Android Studio 3.0开始

2021-11-20 21:40:42 1457

原创 安卓架构师之路--线程安全

文章目录一、概览二、什么是线程安全?三、Syncnoized1. 使用方法2. jvm优化3.Synchronized的优势4.Synchronized的劣势四、volatile可见性修饰五、aotomic原子类ReentrantLock1.基本用法一、概览首先用一张图来概述本文的基本内容二、什么是线程安全?线程安全的本质是:能够让并发线程有序的进行,且同一时刻只能有一个线程访问同步资源。三、Syncnoized1. 使用方法private synchronized void fun(){

2021-11-09 21:51:59 2398

原创 安卓架构师之路--多线程

文章目录一、概览二、创建线程的五种方式1方式一:最普通的方式方式二:多用于需要知道进度的子线程,如apk更新方式三:handlerThread,用于主线程向子线程发送消息方式四:IntentService方式五:线程池二、线程的优先级1.Java方式2.安卓方式三、线程的几种状态一、概览首先用一张图来概述本文的基本内容二、创建线程的五种方式1方式一:最普通的方式 public static void simpleThread() { new Thread(new Runna

2021-11-09 21:07:08 153

原创 golang如何单元测试

一:一个简单例子Go 语言推荐测试文件和源代码文件放在一块,测试文件以 _test.go 结尾。test/ |--math.go |--math_test.gopackage testfunc Add(a int, b int) int { return a + b}package testfunc Add(a int, b int) int { return a + b}测试用例名称一般命名为 Test 加上待测试的方法名。测试用的参数有且只有一个,在这

2021-03-02 11:17:47 2111 1

原创 tcp端口状态说明

1、LISTENING状态FTP服务启动后首先处于侦听(LISTENING)状态。2、ESTABLISHED状态ESTABLISHED的意思是建立连接。表示两台机器正在通信。3、CLOSE_WAIT对方主动关闭连接或者网络异常导致连接中断,这时我方的状态会变成CLOSE_WAIT 此时我方要调用close()来使得连接正确关闭4、TIME_WAIT我方主动调用close()断开连接,收到对方确认后状态变为TIME_WAIT。TCP协议规定TIME_WAIT状态会一直持续2MSL(即两倍的分 .

2021-02-28 21:38:19 328

原创 linux文本操作命令小结

一。grep参考文章:https://blog.csdn.net/u013230234/article/details/793125571.正则表达式(对文本处理)正则表达式是用来匹配字符串的,针对文件内容的文本过滤工具里,大都用到正则表达式,如vi,grep,awk,sed等。简单点来说,正则表达式是对一组正在处理的文本的描述。# 匹配包含abc xxxxxxxxxxxxxx xyz的文本less xxx.txt|grep "abc.*xyz"二。通配符(对文件名处理)参考文章:

2020-12-22 17:33:43 275

原创 阿里canal是什么?canal简明介绍要环境搭建

这里写目录标题一. 简介二.工作原理1.传统mysql主从复制工作原理2.canal 工作原理三.canal-server环境搭建四.client实现五.集群配置一. 简介canal [kə’næl],译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费早期阿里巴巴因为杭州和美国双机房部署,存在跨机房同步的业务需求,实现方式主要是基于业务 trigger 获取增量变更。从 2010 年开始,业务逐步尝试数据库日志解析获取增量变更进行同步,由此衍生出了大量的数据

2020-10-27 14:28:47 1222

原创 一文了解mysql中各种锁类型

一。死锁产生例如说两个事务,事务A锁住了1-5行,同时事务B锁住了6-10行,此时事务A请求锁住6-10行,就会阻塞直到事务B施放6-10行的锁,而随后事务B又请求锁住1-5行,事务B也阻塞直到事务A释放1-5行的锁。死锁发生时,会产生Deadlock错误。二.锁类型1. 表锁不会出现死锁,发生锁冲突几率高,并发低。2. 行锁会出现死锁,发生锁冲突几率低,并发高行锁分 共享锁 和 排它锁。注意几点:1.行锁必须有索引才能实现,否则会自动锁全表,那么就不是行锁了。2.两个事务不能

2020-10-13 09:57:33 1085

原创 使用docker安装mysql并连接

1.搜索docker search mysql或者https://hub.docker.com/_/mysql/官网查看2.下载–下载最新版docker pull mysql下载指定版本docker pull mysql:版本号如果不能下载,尝试重启dockersystemctl restart docker使用docker images查看已安装的镜像3.运行docker run -p 3306:3306 --name mysqldocker run -p 3306:330

2020-08-29 18:38:50 227

原创 golang微服务教程2--Micro

一.Micro介绍简单的说Micro是一个微服务框架它默认实现了consul作为服务发现,通过http、protobuf、进行通信。二.Micro安装步骤1.下载先把所有的依赖库都下载一遍go get -u -v github.com/go-log/loggo get -u -v github.com/gorilla/handlersgo get -u -v github.com/gorilla/mux go get -u -v github.com/gorilla/websocket

2020-07-26 12:23:10 309

原创 golang微服务教程2--GRPC

一.GRPC 是什么gRPC是goole开源的一个RPC框架和库,支持多语言之间的通信。底层通信采用的是 HTTP2 协议。gRPC在设计上使用了 ProtoBuf 这种接口描述语言。这种IDL语言可以定义各种服务,google还提供了一种工具 protoc 来编译这种IDL语言,生成各种各样的语言来操作服务。二.GPRC特点定义服务简单,可以很快的搭建出一个RPC调度的服务gRPC是与语言无关,平台无关的。你定义好了一个protobuf协议,就可以用protoc生成不同语言的协议框架使用HTTP

2020-07-26 12:22:37 298

原创 golang依赖包下载失败?试试GO依赖管理工具go Modules配置goproxy代理

一.前言初学者使用golang的时候可能会遇到这样几个问题1.在使用go get的时候,由于一些众所周知的原因,经常会下载失败2.拿到一个项目,很难知道使用了哪些依赖库,这些依赖库都是什么版本的3.go的项目必须放在gopath下面,我想放在任意目录下如果你有相同的疑问,那么go Modules就能很好的解决这些问题二. Go Modules有哪些特点:Go Modules是官方正式推出的包依赖管理项目,由Russ Cox (即Go 现在的掌舵人)推动,dep是“official expe

2020-07-26 11:54:52 4817

原创 golang微服务教程1--protobuf

这里写自定义目录标题一.什么是微服务二、什么是protobuf2.1优点2.2缺点三.Protobuf安装步骤四.加入golang的支持1.获取 proto包2.安装protoc-gen-go插件五.demo1.编写test.proto测试类2.编译一.什么是微服务据说,早在2011年5月,在威尼斯附近的软件架构师讨论会上,就有人提出了微服务架构设计的概念,用它来描述与会者所见的一种通用的架构设计风格。时隔一年之后,在同一个讨论会上,大家决定将这种架构设计风格用微服务架构来表示。起初,对微服务的概念,

2020-06-14 11:41:30 503 1

原创 goLang与redis

一.前言Redis是一种高性能的Key-Value数据库1.Redis特性Redis 与其他 key - value 缓存产品有以下三个特点:Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。Redis支持数据的备份,即ma...

2019-08-09 14:37:28 439

原创 go语言操作MySql数据库(原生与ORM方式)

一.原生方式golang其实官方不提供连接mysql实现,先下载第三方的实现https://github.com/golang/go/wiki/SQLDrivers该地址可以看到所以的驱动包.这里选择了Go-MySQL-Driver这个实现使用如下命令即可 go get github.com/go-sql-driver/mysql...

2019-07-19 19:33:34 5645 1

原创 go语言之beego框架

一.前言1.Beego框架是go语言开发的web框架。2.beego官网网址: https://beego.me/二.项目结构基于MVC架构,其基本目录如下conf文件夹:放的是项目有关的配置文件Controllers:存放主要的业务代码main.go:项目的入口文件Models:存放的是数据库有关内容routers:存放路由文件,路由作用是根据不同的请求指定不同的控制器s...

2019-07-16 23:14:33 5086

原创 go语言http编程与爬虫示例

一.前言我们知道,用java做服务端的时候需要很多繁琐的配置,还需要开发工具关联tomcat等,golang相对而言就简单了很多.我们通过几个示例看一下golang怎么做http编程.二.编写一个简单的web服务器package mainimport ( "net/http" "fmt" "os")func OpenSendFile(fNmae string, w http....

2019-06-21 10:26:19 540

原创 go语言结构体(struct)

一.前言1.golang中是没有class的,但是有一个结构体struct,有点类似,他没有像java,c++中继承的概念,但是他有一个类似功能的结构嵌入2.Go 语言中结构体的内嵌配合接口比面向对象具有更高的扩展性和灵活性。3.Go 语言不仅认为结构体能拥有方法,且每种自定义类型也可以拥有自己的方法。二.实例化 package mainimport "fmt"type Stud...

2019-06-08 15:24:06 781

转载 AndroidStudio3.0 Android Profiler分析器(cpu memory network 分析器)

 本文转自:https://blog.csdn.net/niubitianping/article/details/72617864 Android Profiler分为三大模块: cpu、内存 、网络。基本的使用在上一篇文章有讲到。这里详细说一下。一、 CPU分析器CPU ProfilerCPU分析器可帮助您实时检查应用程序的CPU使用情况和线程活动,并记录方法跟踪,以便您可...

2019-01-07 18:12:19 531

原创 PopupWindow布局平滑切换到View布局

一.前言popupWindow是我们常用的控件了,我们经常会用它来实现一些弹框需求.然而我们的产品很可能突然会对弹框外部的某些按钮的点击做出响应而且还不能让当前popupWindow消失,此时我们内心是崩溃的,真是悔不当初啊,为什么当初不干脆使用view布局引入的形式来做呢?那么有没有一种办法让我们的popupWindow快速切换到View布局形式呢?我们来看看项目的例子二.实现1.核心...

2018-12-06 15:37:36 538

转载 Android View坐标系详解(getTop()、getX、getTranslationX...)

View 提供了如下 5 种方法获取 View 的坐标:1. View.getTop()、View.getLeft()、View.getBottom()、View.getRight();//相对父容器2. View.getX()、View.getY();//getX()==getLeft()、getY==getTop()。3. View.getTranslationX()、View.getT...

2018-10-18 09:31:49 2113

原创 安卓WebView改变网页文字背景颜色

原理为动态向html里面注入js方法,然后执行,不难,直接贴代码关键代码在onPageFinished方法里面输入webview.loadUrl(“javascript:”+“js方法名或者.js”)。mWebview.setWebViewClient(new WebViewClient() { @Override public boolean...

2018-09-27 15:15:51 4822

原创 go语言顺序编程

一.变量1.1声明单变量声明 var v1 int = 1 var v2 = 2 v3 := 3多变量声明var v1,v2,v3 int = 1,2,3var( v1 int = 1 v2 int = 2 v3 int = 3 )1.2匿名变量使用 ” _” 做为占位符...

2018-08-21 18:48:33 211

原创 gradle配置优化及dependencies中各种依赖方式说明

一.前言当我们用AndroidStudio新建项目时候发现默认的compile已经改为了implementation. implementation以前并没有接触过,这里干脆总结一下dependencies中各种依赖方式的区别.二.各种依赖方式说明implementation 这个指令的特点就是,对于使用了该命令编译的依赖,对该项目有依赖的项目将无法访问到使用该命令编译的依赖...

2018-05-23 16:29:04 36121 2

原创 安卓性能优化总结

一前言二卡顿的常见原因三导致卡顿的常见解决方案四过渡绘制五层级过深六 使用Traceview进行分析优化一.前言开发应用首先要讲究良好的用户体验,如果一款软件卡顿现象严重,不流畅,经常崩溃,那么将给用户带来极不良好的体验,从而损失用户.  大多数用户感知到的卡顿等性能问题的最主要根源都是因为渲染性能。从设计师的角度,他们希望App能够有更多的动画,图片等时尚元素来

2018-01-27 15:49:35 512

转载 主干(trunk)、分支(branch )、标记(tag) 用法示例 + 图解

转载自:http://www.cnblogs.com/YingYue/p/6118972.html,收藏在此,感谢原创。主干(trunk)、分支(branch )、标记(tag) 用法示例 + 图解以svn为例,git的master相当于trunk,dev分支相当于branches-------------------------------------

2018-01-08 16:11:15 926

原创 Android性能优化--Inspact Code代码检查

一.前言在Android Studio中,Google还提供了很多代码分析工具,这些工具都集中在Android Studio的Analyze菜单中通过Inspect Code功能,可以让IDE分析整个工程,类似于Android的Lint分析Inspect Code不仅提供了Lint的检测功能,还提供了一些其他的代码静态分析结果,同时给出了大致的修改意见,你也可以选择Code Cleanup功能来

2017-09-24 22:11:09 2435

转载 Android Studio你可能还不知道的操作

Search ActionAndroid Studio快捷键众多,因此Android Studio提供了一个类似搜索指令的入口,通过快捷键”Command+Shift+A”可以快速调出这个搜索入口,例如要查找打开最近的工程这样一个指令,可以直接输入”Open Recent”,按下回车键后就可以直接使用这条指令操作与导航单词选择在Android S

2017-09-24 21:28:27 2325

转载 UI优化之 Hierarchy Viewer使用详解

文章转载自.http://blog.csdn.net/swordgirl2011/article/details/52887925 功能Hierarchy Viewer工具提供了一个可视化界面显示布局的层次结构,让我们可以进行调试,从而优化界面布局结构。2. 启动工具启动方式有两种,一种是通过终端命令,输入hierarchyviewer,进行启动,第二种

2017-09-23 21:42:06 787

Retrofit2Demo

博客地址http://blog.csdn.net/jinfulin/article/details/66474800

2017-03-26

安卓通过theme实现窗体切换动画

安卓通过theme实现窗体切换动画

2016-11-04

android wifi连接打印机并获取打印机状态

android wifi连接打印机并获取打印机状态 博客地址http://blog.csdn.net/jinfulin/article/details/52622055

2016-09-22

空空如也

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

TA关注的人

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