
学无止境
文章平均质量分 86
mysimplelove
技术的道路看不到尽头
展开
-
Kotlin 语言学习(12) - 泛型类型参数
一、本文概要二、泛型类型参数泛型允许你定义带 类型形参 的类型,当这种类型的实例被创建出来的时候,类型形参被替换成为 类型实参 的具体类型。和Java不同,Kotlin始终要求类型实参要么被显示地说明,要么能被编译器推导出来。例如,在Java中可以声明List类型的变量,而不需要说明它可以包含哪些事物,而Kotlin从一开始就有泛型,所以它不支持原生态类型,类型实参必须定义。...原创 2020-04-26 20:21:09 · 688 阅读 · 0 评论 -
Kotlin 语言学习(11) - 内联函数
一、本文概要二、内联函数当我们使用lambda表达式时,它会被正常地编译成匿名类。这表示每调用一次lambda表达式,一个额外的类就会被创建,并且如果lambda捕捉了某个变量,那么每次调用的时候都会创建一个新的对象,这会带来运行时的额外开销,导致使用lambda比使用一个直接执行相同代码的函数效率更低。如果使用inline修饰符标记一个函数,在函数被调用的时候编译器并不会生成函数...原创 2020-04-26 19:56:52 · 2663 阅读 · 0 评论 -
Kotlin 语言学习(10) - 高阶函数:Lambda
一、本文概要二、声明高阶函数按照定义,高阶函数就是 以另一个函数作为参数或者返回值的函数,在Kotlin中,函数可以用lambda或者函数引用来表示。例如,标准库中的filter函数将一个判断式函数作为参数,因此它就是一个高阶函数。list.filter { x > 0 }2.1 函数类型为了声明一个以lambda作为实参的函数,你需要知道如何声明对应形参的类型...原创 2020-04-26 18:59:36 · 845 阅读 · 0 评论 -
Kotlin 语言学习(9) - 委托属性
一、本文概要二、委托属性的基本操作2.1 委托属性的基本语法class Foo { var p : Type by Delegate()}类型为Type的属性p将它的访问器逻辑委托给了另一个Delegate实例,通过关键字by对其后的 表达式求值 来获取这个对象,关键字by可以用于任何 符合属性委托约定规则的对象。按照约定,Delegate类必须具有getVal...原创 2020-04-26 16:43:02 · 350 阅读 · 0 评论 -
Kotlin 语言学习(8) - 运算符重载及其他约定
一、本文概要在Kotlin中,我们可以通过 调用自己代码中定义的函数,来实现 特定语言结构。这些功能与 特定的函数命名 相关,而不是与特定的类型绑定。例如,如果在你的类中定义了一个名为plus的特殊方法,那么按照约定,就可以在该类的实例上使用+运算符,这种技术称为 约定。因为由类实现的接口集是固定的,而Kotlin不能为了实现其他接口而修改现有的类,因此一般 通过扩展函数的机制 来为现...原创 2020-04-26 15:29:01 · 344 阅读 · 0 评论 -
Kotlin 语言学习(7) - Kotlin 的类型系统
一、本文概要二、基本数据类型和其它基本类型2.1 基本类型:Int、Boolean 及其它Java把基本数据类型和引用类型做了区分:基本数据类型,例如int的变量直接存储了它的值,我们不能对这些值调用方法,或者把它们放到集合中。 引用类型的变量存储的是指向包含该对象的内存地址的引用。Kotlin不区分基本数据类型和引用类型,它使用的永远是一个类型(例如Int),此外,你还能...原创 2020-04-26 11:50:12 · 400 阅读 · 0 评论 -
Kotlin 语言学习(6) - Kotlin 的可空性
一、本文概要二、可空性2.1 可空类型当我们在声明方法时,如果允许在这个方法被调用的时候传给它null的实参,则需要显示地在类型名称后面加上问号来标记它:问号可以加在任何类型的后面来表示这个类型的变量可以存储null引用,而所有常见类型默认都是非空的,除非显示地把它标记为可空。当你有一个可空类型的值,对它的操作也会受到限制:不能调用它的方法 不能把它赋值给非...原创 2020-04-26 10:41:50 · 859 阅读 · 0 评论 -
Kotlin 语言学习(5) - lambda 表达式和成员引用
一、本文概要二、Lambda 表达式和成员引用Lambda表达式,本质上是可以传递给函数的一小段代码,可以轻松地把通用的代码结构抽取成库函数,Kotlin标准库就大量地使用了它们。2.1 Lambda 简介:作为函数参数的代码块Lambda的应用场景有:当一个事件发生的时候运行这个事件处理器; 把这个操作应用到这个数据结构中所有的元素上;在Java中,可以用匿名内部类...原创 2020-04-22 20:02:51 · 460 阅读 · 0 评论 -
Kotlin 语言学习(4) - 数据类、类委托 及 object 关键字
一、本文概要二、数据类和类委托2.1 数据类:自动生成通用方法的默认实现在平时的开发中,我们往往会使用许多的xxBean对象用作数据容器,而在定义这些对象时,一般会重写它的以下三个方法:equals:用来比较实例 hashCode:用来作为例如HashMap这种基于哈希容器的类 toString:用来为类生成按声明顺序排列的所有字段的字符串表达形式在Kotlin中,只需...原创 2020-04-21 21:53:48 · 368 阅读 · 0 评论 -
Kotlin 语言学习(3) - 类、对象和接口
一、本文概要二、定义类继承结构2.1 Kotlin 中的接口Kotlin的接口可以包含以下两种类型的方法:简单的抽象方法 包含默认实现的抽象方法简单接口一个简单的Kotlin接口使用 interface 关键字来声明,所有实现这个接口的非抽象类都需要实现接口中定义的抽象方法。 Kotlin在类名后面使用 冒号 代替了Java中的extends和implements关...原创 2020-04-21 20:43:58 · 408 阅读 · 0 评论 -
Kotlin 语言学习(2) - 函数的定义与调用
一、本文概要二、在 kotlin 中创建集合在kotlin中,创建HashSet、ArrayList和HashMap的方法如下:通过打印这些集合的类型,可以看到是采用的标准的Java集合类:这么做的原因,是因为使用标准的Java集合使kotlin可以更容易地与Java代码交互。当从Kotlin调用Java函数的时候,不用转换它的集合类来匹配Java的类,反之亦然。在...原创 2020-04-14 20:54:48 · 535 阅读 · 0 评论 -
Kotlin 语言学习(1) - Kotlin 基础
一、本文概要二、函数和变量2.1 函数2.1.1 函数的基本构成在Kotlin中,函数的基本结构由四个部分构成:函数名称 参数列表 返回类型 函数体函数的声明以关键字fun开始,函数名称紧随其后,接下来是括号括起来的参数列表,参数列表的后面跟着返回类型,返回类型和参数列表之间用冒号隔开,最后是函数体。下面是一个比较大小的函数例子,上面谈到的四个部分构成...原创 2020-04-13 18:56:17 · 661 阅读 · 1 评论 -
Kotlin语言之let、with、run、apply、also内联函数
前言:随着公司项目对主开发语言切换的需要,本人也是在持续的对Kotlin语言进行深入全面的学习和使用。相比Java, Kotlin提供了不少高级语法特性,在Kotlin中的源码标准库(Standard.kt)中提供了一些Kotlin扩展的内置函数可以优化kotlin的编码。Standard.kt是Kotlin库的一部分,它定义了一些基本函数。 这个源代码文件虽然一共不到50行代码,但是这些函数功能...原创 2020-04-13 15:54:14 · 411 阅读 · 0 评论 -
自定义容器实现网格(九宫格)布局效果
前言:在近期的项目开发中,需要在列表的item中实现网格布局的ui效果,考虑到列表的性能和布局嵌套的层次等因素,最后决定自己写一个支持网格布局效果的容器,直接在列表的item中使用该容器就可以支持网格(九宫格)的显示效果。避免了在列表中嵌套列表的实现方式。下面的类FeedBaseGridView支持自定义列数、行数、不同行高的ui效果,需要实现类似效果的同学可以直接复制下面的类的代码到项目中,...原创 2019-12-16 14:47:02 · 2778 阅读 · 0 评论 -
android开发之在Mac用charles抓包(http,https)
前言:最近换了公司进行android项目的开发,由于公司的需要由用了多少年的windows开发项目换成了mac进行开发。既然由windows换成了mac,自然各种开发工具也要换成mac版本的才行,所以今天要讲的就是在mac上的用charles进行抓包来辅助项目的开发。之所以直到现在才写这篇文章,重要是因为入职到现在一直在忙,好不容易才现在有了时间和精力。今天之所以专门讲一下charles抓包,原创 2018-01-02 14:16:31 · 928 阅读 · 0 评论 -
Android中APK安装流程解析
前言:大家都知道,手机关机以后,就是一个冰冷的砖头,只能用来做防身的利器,但是开机后,点击桌面上的任何一个图片,都能开启一个APP,这说明在开机过程中,系统把已经安装好的APP加载到内存中,这到底是怎么做的?所以我们可以推断,在安卓系统中肯定存在这么一块区域,用于存放已经安装的APP的信息,在开机的时候,通过系统扫描,这块区域,把对应的内容加载到内存中去。其次,我们知道了在Android系...原创 2019-06-25 17:51:47 · 25188 阅读 · 6 评论 -
Android App启动流程详解
前言:在之前的文章中已经写了apk的打包流程、安装流程,今天就是梳理一下apk系列的最后的流程--app启动流程。经过今天的梳理以后咱们就可以对apk包是怎么编译生成的、apk是怎么被安装到安卓手机的、用户点击了桌面icon以后app是怎么启动起来的 整个流程有清晰的认知和了解了。下面先附上前面文章的传送门:apk打包流程详解apk安装流程详解在开始分析app启动流程之前,我们先回...原创 2019-06-26 15:26:19 · 32531 阅读 · 10 评论 -
Java线程生命周期以及方法详解
前言:现在的操作系统在运行一个程序时, 会为其创建一个进程。 在进程中操作系统调度的最小单元是线程, 也叫轻量级进程(Light Weight Process) , 在一个进程里可以创建多个线程, 这些线程都拥有各自的计数器、 堆栈和局部变量等属性, 并且能够访问共享的内存变量。 处理器在这些线程上高速切换, 让使用者感觉到这些线程在同时执行。啰嗦一下进程、线程是什么?进程是指一个内存中...原创 2019-06-24 16:25:43 · 3644 阅读 · 1 评论 -
Android之Tinker集成使用
前言:当前市面上为了实现不发新版本的前提下实现修改线上严重bug的目标而诞生的热补丁方案有很多,其中比较出名的有阿里的AndFix、美团的Robust以及腾讯的Tinker等等,但是其中用的比较广的还是腾讯的Tinker,所以在这里我也是选取了Tinker作为学习研究对象。tinker之dex更新详解tinker之资源更新详解tinker之so更新详解在文章开始之前先copy一个不...原创 2019-07-08 15:43:09 · 2074 阅读 · 2 评论 -
热修复Tinker 原理解析之Dex更新
前言:在之前已经梳理了微信的热修复Tinker的接入使用流程,这么牛逼的东西勾起了我的兴趣,因此走上了探究其实现原理的道路。Tinker支持Dex、资源文件、so文件的热更新,此次分析过程也将一步步的从这三个方面对Tinker进行源码解析,跟着我的梳理希望你也可以有所收获。Android tinker接入使用tinker之资源更新详解tinker之so更新详解在分析之前先copy出...原创 2019-07-09 15:29:42 · 1804 阅读 · 2 评论 -
热修复Tinker 原理解析之资源更新
前言:之前已经在文章中对Tinker的Dex热更新的源码做了分析,今天接着开始对Tinker的资源热更新做源码的分析,废话就不多啰嗦了直接开始正文啦。Android tinker接入使用tinker之dex更新详解tinker之so更新详解一、资源补丁生成友情提示:在上篇Dex分析的文章中已经介绍了生成补丁文件的开始流程,因此这里直接从ResDiffDecoder.patch(...原创 2019-07-09 20:07:32 · 2553 阅读 · 0 评论 -
热修复Tinker 原理解析之so更新
前言:之前已经在文章中对Tinker的Dex热更新、资源热更新的源码做了分析,今天接着开始对Tinker的so热更新做源码的分析,废话不多说直接出发。Android tinker接入使用tinker之dex更新详解tinker之资源更新详解开始先回顾一下Android里面关于so的加载的两种方式:System.loadLibrary:这种方式传入的是so的名字,会直接从系统的...原创 2019-07-09 20:48:48 · 2579 阅读 · 0 评论 -
Lottie使用及源码详解
前言:Lottie对于我们安卓开发人员来说就是实现复杂动画效果的神器,越来越多的项目中使用了Lottie来实现复杂好看的动画并因此提高的动画的开发成本和效率,当然我们的项目也开始使用Lottie了。下面这些动画在之前看着感觉实现起来很亚历山大,有了Lottie就很简单了。Lottie是Airbnb开源的动画实现项目,支持Android、iOS、ReactNaitve三大平台。Lottie...原创 2019-07-04 20:28:37 · 7926 阅读 · 0 评论 -
Android之增量更新详解
前言:自从 Android 4.1 开始, Google Play 引入了应用程序的增量更新功能,App使用该升级方式,可节省约2/3的流量。现在国内主流的应用市场也都支持应用的增量更新了,最常见的应用宝省流量更新。什么是增量更新?增量更新的关键在于增量一词。平时我们的开发过程,往往都是今天在昨天的基础上修改一些代码,app的更新也是类似的:往往都是在旧版本的app上进行修改。这样看来...原创 2019-07-11 15:25:18 · 9610 阅读 · 3 评论 -
bsdiff在mac的编译与使用
前言:本文是对之前apk增量更新文章的补充内容,单独拎出来梳理一下bsdiff在mac上的编译和使用。下面的介绍流程就是我在自己电脑的操作实现步骤。第一步:下载下载请点击:bsdiff/bspatch压缩包第二步:编译先解压下载的bsdiff-4.3.tar.gz压缩包;再进入bsdiff-4.3目录,在终端下执行构建用make 命令;此时应该会报错:Makefile...原创 2019-07-11 15:55:42 · 2210 阅读 · 1 评论 -
Android可收缩/扩展的TextView(CollapsibleTextView)
前言:在某些应用中,总会遇到一些类似于公告、简介、说明等长文本的TextView,但是为了排版美观等因素,我们通常是要隐藏后半部的文本,而是显示三四行的开始部分(摘要),然后在尾部会提供用户一个扩展/收缩的按钮,使得文本框可以在需要的时候扩展开来查看全文。前段时间我们的项目也需要这样的效果,就借鉴了一下网上的文章原理并做了算法优化和逻辑修改,自己实现了一个复用性还算可以的可收缩/扩展的Text...原创 2019-06-21 20:26:12 · 2163 阅读 · 2 评论 -
Android 屏幕(View)刷新机制(原理)
前言:在平时开发项目的时候我们都知道生成一个view加入到window中,或者对显示的view调用其属性改变的方法亦或者启动在某个view上配置的动画就会让屏幕进行刷新达到自己想要的ui效果。但是咱们的代码是怎么触发屏幕刷新或者说系统是用怎样的机制去刷新屏幕改变的view属性的很多人还是不太清楚。当然最开始我也是没有系统的梳理过,前段时间经过对一些文章博客的阅读和系统源码的梳理我才有了较为清晰的感...原创 2019-06-17 19:46:21 · 10359 阅读 · 14 评论 -
android自定义带进度条的圆形图片
前言:在项目听新闻的改版中需要实现环绕圆形新闻图片的进度条功能,作为技术预备工作我就去看了一些网上的相关的原理,做了一个自定义带进度条的圆形图片的demo,并将这个实现写成文章发布出来,谁需要了可以进来看看。作为懒人,文章的有些图片等资源是在网上直接把别人的拿过来用了,如果你觉得在哪看过请不要迷惑,而且在此提前对资源的主人表示感谢原创 2018-05-11 14:42:15 · 3221 阅读 · 2 评论 -
ThreadLocal是什么呢
前言:上次文章说到在面试的过程中很多候选者对Handler如何达到切换线程的效果不是很清晰,所以那篇文章对此做了解释。但是在文章中解释Looper的时候牵扯到了ThreadLocal这个东西我却没有做仔细的说明只是一笔带过了,所以今天我把ThreadLocal的文章给补上啦。ThreadLocal是什么呢,它是怎么供我们使用的呢?先简单说:ThreadLocal就是能够存储数据,它的作用域是线程。...原创 2018-03-28 11:08:31 · 278 阅读 · 1 评论 -
Android之Toast源码解析
前言:在最近的面试过程中,有一次偶然的问到了候选者的Toast的源码的问题,我发现很多人基本上对Toast怎么使用了然于心,但是它的原理却是不怎么关注,所以我今天打算写篇文章来介绍一下Toast的源码原理,希望给那些想要了解Toast原理的同学看看。这篇文章只是从解析源码的角度给大家分析Toast的,所以可能枯燥一点,请用点耐心开始看吧。。。我们平时对Toast的常规调用就是:Toast.make...原创 2018-03-30 10:59:55 · 481 阅读 · 0 评论 -
android之handler切换线程终极篇
前言:最近部门招人的时候,对于我的一个问题(在handler的机制流程里,哪部分原理是真正的起到了切换线程的作用?)很多候选人都是说不出来,或者表达不清楚(虽然他们对handler的整体机制原理说的头头是道)。所以,才有了我今天这篇老生常谈的文章,但是我今天主要不是给大家介绍handler机制原理或者怎么去使用它,而是想帮大家弄明白咱们的handler究竟是怎么实现了线程的切换。作为文章的开始,我...原创 2018-03-19 19:23:03 · 7323 阅读 · 8 评论 -
android中aar集成方式
前言:过了年来到公司就是开始干活了,由于依赖部门的支持方式的修改,我的项目这边需要修改为使用aar的方式来集成登陆的模块了,借着这个机会也对aar使用的集成梳理了一下,这虽然不是难的东西,但是也是写出来吧,万一哪个伙伴可以用上呢,就算没白写了。这篇文章对aar使用的介绍,是分为aar是什么,aar怎么生成,aar怎么使用这几个方面来写的。不啰嗦了,下面就开始吧。。。aar是什么原创 2018-02-27 16:59:59 · 10741 阅读 · 4 评论 -
react native 之 webstorm开发(windows)
前言:作为Android开发的老司机,前端时间我在windows上面把reactnative项目做了一个流程的研究,同时也把相关的博客给贴了出去。今天考虑到reactnative的js的书写需要开发工具,就看了一下网上的各种资料,最后选了webstorm作为自己开发reactnative的工具来走了一下reactnative项目js的书写流程。我选择webstorm的原因主要是它和Androi原创 2017-11-16 14:13:38 · 2207 阅读 · 0 评论 -
react native之原生和RN的交互
前言:前端时间随着自己的学习和研究,也写了几篇关于react native的文章,虽然都是比较简的,但是都是根据自己的效果来做的流程,所以还是比较实用的,可以避免很多的坑。这篇react native与原生的交互也是很简单的实现,但是本人也是踩了很多的大坑才跳了出来实现了想要的效果。啰嗦一下:这篇文章我打算作为自己学习react native的终篇了,以后应该不会再专门写这种怎么学习和使用RN原创 2017-11-14 16:58:02 · 2544 阅读 · 0 评论 -
react native 之hello world
前言:前几天将react native开发需要的环境给搭建了起来,并且也初始化了一个react native 项目,这篇文章接着上个阶段,将细致的一步到位的简单的告诉对面的你怎么去将初始化的react native 项目在真机上跑起来,并且推开RN技术学习的大门,实现标志性的效果 hello world!!友情提示:以下流程的操作是基于我的windows电脑已经配置了java,安装了R原创 2017-11-13 13:45:42 · 1484 阅读 · 0 评论 -
react native 之项目初始化一步到位
自从Facebook的react native 出世以来,风靡一时,作为前端开发猿,我也从此踏入了这条不归路。。。前言:本人一直习惯于用windows系统开发Android程序,鉴于此以后的react native 的项目博客都会是基于windows的介绍,爱好mac的同僚请绕路前行。此篇博客主要是介绍react native 的环境的搭建和项目的初始化,搜集了网上的各种的原创 2017-11-09 16:18:00 · 3281 阅读 · 1 评论 -
Android沉浸式之一步到位(fragment 的坑之解法)
前言:Android沉浸式已经出来了很长时间了,之前呢公司没有该方面的需要,所以除了自己的看各种文章进行了了解就也没有在项目中使用,但是前段时间产品有了沉浸式的效果的需要,我就在巨大的坑里煎熬了好几天才爬了出来,所以趁着有时间赶紧整理一下,给路过的人瞧一瞧 ,看一看,见坑还是绕过走最舒服。友情提示:该文章是按照我的项目的沉浸式的做法写出来的,只考虑5.0以上的版本,4.x的版本没有使用。已经写原创 2017-11-10 09:54:47 · 5378 阅读 · 1 评论 -
Android 高斯模糊之RenderScript
前言:近年来,app端的图片高斯模糊效果备受那些设计师们的青睐,在那些牛逼的APP中,如微信、QQ、网易云音乐等等都有对背景做高斯图模糊的设计,我们的项目设计师也提出了这个要求,我就查了一些文档做了一下,所以有了这篇文章的由来。目前 咱们Android 上实现高斯模糊效果的方式有以下几种: Java : FastBlur.java ,是由应用非常广泛的 StackBlur 模糊算法实现...原创 2018-07-17 15:47:27 · 6405 阅读 · 1 评论 -
android日历提醒之简单实用
前言:我们在自己的项目开发中,经常会有预约提醒、定时提醒等方面的需求,这时我们可以使用安卓自己的系统日历来实现。 通过代码向系统日历中写入日历事件、设置提醒,就可以实现到特定时间时提醒用户的功能。当然了,网上的关于系统日历使用的文章还是挺多的,但是我浏览了一遍,发现没有可以直接拿过来就可以在项目中使用的,所以就有了今天的博客,致力于如果对面的你需要的话就可以直接复制该文章的代码简单快速的实现你的功...原创 2018-07-12 17:37:29 · 17116 阅读 · 5 评论 -
Android ANR(应用无响应)
前言:在Android上,如果你的应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个对话框称作应用程序无响应(ANR:Application Not Responding)对话框。用户可以选择“等待”而让程序继续运行,也可以选择“强制关闭”。所以一个流畅的合理的应用程序中不能出现anr,而让用户每次都要处理这个对话框。因此,在程序里对响应性能的设计很重要,这样系统不会显示ANR给用户...原创 2019-06-21 16:26:08 · 18042 阅读 · 0 评论