自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

蒙的博客

世界没有尽头,技术永无止境。

  • 博客(63)
  • 资源 (4)
  • 收藏
  • 关注

原创 Kotlin 语言学习(12) - 泛型类型参数

一、本文概要二、泛型类型参数泛型允许你定义带 类型形参 的类型,当这种类型的实例被创建出来的时候,类型形参被替换成为 类型实参 的具体类型。和Java不同,Kotlin始终要求类型实参要么被显示地说明,要么能被编译器推导出来。例如,在Java中可以声明List类型的变量,而不需要说明它可以包含哪些事物,而Kotlin从一开始就有泛型,所以它不支持原生态类型,类型实参必须定义。...

2020-04-26 20:21:09 587

原创 Kotlin 语言学习(11) - 内联函数

一、本文概要二、内联函数当我们使用lambda表达式时,它会被正常地编译成匿名类。这表示每调用一次lambda表达式,一个额外的类就会被创建,并且如果lambda捕捉了某个变量,那么每次调用的时候都会创建一个新的对象,这会带来运行时的额外开销,导致使用lambda比使用一个直接执行相同代码的函数效率更低。如果使用inline修饰符标记一个函数,在函数被调用的时候编译器并不会生成函数...

2020-04-26 19:56:52 2548

原创 Kotlin 语言学习(10) - 高阶函数:Lambda

一、本文概要二、声明高阶函数按照定义,高阶函数就是 以另一个函数作为参数或者返回值的函数,在Kotlin中,函数可以用lambda或者函数引用来表示。例如,标准库中的filter函数将一个判断式函数作为参数,因此它就是一个高阶函数。list.filter { x > 0 }2.1 函数类型为了声明一个以lambda作为实参的函数,你需要知道如何声明对应形参的类型...

2020-04-26 18:59:36 741

原创 Kotlin 语言学习(9) - 委托属性

一、本文概要二、委托属性的基本操作2.1 委托属性的基本语法class Foo { var p : Type by Delegate()}类型为Type的属性p将它的访问器逻辑委托给了另一个Delegate实例,通过关键字by对其后的 表达式求值 来获取这个对象,关键字by可以用于任何 符合属性委托约定规则的对象。按照约定,Delegate类必须具有getVal...

2020-04-26 16:43:02 288

原创 Kotlin 语言学习(8) - 运算符重载及其他约定

一、本文概要在Kotlin中,我们可以通过 调用自己代码中定义的函数,来实现 特定语言结构。这些功能与 特定的函数命名 相关,而不是与特定的类型绑定。例如,如果在你的类中定义了一个名为plus的特殊方法,那么按照约定,就可以在该类的实例上使用+运算符,这种技术称为 约定。因为由类实现的接口集是固定的,而Kotlin不能为了实现其他接口而修改现有的类,因此一般 通过扩展函数的机制 来为现...

2020-04-26 15:29:01 287

原创 Kotlin 语言学习(7) - Kotlin 的类型系统

一、本文概要二、基本数据类型和其它基本类型2.1 基本类型:Int、Boolean 及其它Java把基本数据类型和引用类型做了区分:基本数据类型,例如int的变量直接存储了它的值,我们不能对这些值调用方法,或者把它们放到集合中。 引用类型的变量存储的是指向包含该对象的内存地址的引用。Kotlin不区分基本数据类型和引用类型,它使用的永远是一个类型(例如Int),此外,你还能...

2020-04-26 11:50:12 341

原创 Kotlin 语言学习(6) - Kotlin 的可空性

一、本文概要二、可空性2.1 可空类型当我们在声明方法时,如果允许在这个方法被调用的时候传给它null的实参,则需要显示地在类型名称后面加上问号来标记它:问号可以加在任何类型的后面来表示这个类型的变量可以存储null引用,而所有常见类型默认都是非空的,除非显示地把它标记为可空。当你有一个可空类型的值,对它的操作也会受到限制:不能调用它的方法 不能把它赋值给非...

2020-04-26 10:41:50 726

原创 Kotlin 语言学习(5) - lambda 表达式和成员引用

一、本文概要二、Lambda 表达式和成员引用Lambda表达式,本质上是可以传递给函数的一小段代码,可以轻松地把通用的代码结构抽取成库函数,Kotlin标准库就大量地使用了它们。2.1 Lambda 简介:作为函数参数的代码块Lambda的应用场景有:当一个事件发生的时候运行这个事件处理器; 把这个操作应用到这个数据结构中所有的元素上;在Java中,可以用匿名内部类...

2020-04-22 20:02:51 393

原创 Kotlin 语言学习(4) - 数据类、类委托 及 object 关键字

一、本文概要二、数据类和类委托2.1 数据类:自动生成通用方法的默认实现在平时的开发中,我们往往会使用许多的xxBean对象用作数据容器,而在定义这些对象时,一般会重写它的以下三个方法:equals:用来比较实例 hashCode:用来作为例如HashMap这种基于哈希容器的类 toString:用来为类生成按声明顺序排列的所有字段的字符串表达形式在Kotlin中,只需...

2020-04-21 21:53:48 309

原创 Kotlin 语言学习(3) - 类、对象和接口

一、本文概要二、定义类继承结构2.1 Kotlin 中的接口Kotlin的接口可以包含以下两种类型的方法:简单的抽象方法 包含默认实现的抽象方法简单接口一个简单的Kotlin接口使用 interface 关键字来声明,所有实现这个接口的非抽象类都需要实现接口中定义的抽象方法。 Kotlin在类名后面使用 冒号 代替了Java中的extends和implements关...

2020-04-21 20:43:58 342

原创 Kotlin 语言学习(2) - 函数的定义与调用

一、本文概要二、在 kotlin 中创建集合在kotlin中,创建HashSet、ArrayList和HashMap的方法如下:通过打印这些集合的类型,可以看到是采用的标准的Java集合类:这么做的原因,是因为使用标准的Java集合使kotlin可以更容易地与Java代码交互。当从Kotlin调用Java函数的时候,不用转换它的集合类来匹配Java的类,反之亦然。在...

2020-04-14 20:54:48 472

原创 Kotlin 语言学习(1) - Kotlin 基础

一、本文概要二、函数和变量2.1 函数2.1.1 函数的基本构成在Kotlin中,函数的基本结构由四个部分构成:函数名称 参数列表 返回类型 函数体函数的声明以关键字fun开始,函数名称紧随其后,接下来是括号括起来的参数列表,参数列表的后面跟着返回类型,返回类型和参数列表之间用冒号隔开,最后是函数体。下面是一个比较大小的函数例子,上面谈到的四个部分构成...

2020-04-13 18:56:17 562 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 325

原创 自定义容器实现网格(九宫格)布局效果

前言:在近期的项目开发中,需要在列表的item中实现网格布局的ui效果,考虑到列表的性能和布局嵌套的层次等因素,最后决定自己写一个支持网格布局效果的容器,直接在列表的item中使用该容器就可以支持网格(九宫格)的显示效果。避免了在列表中嵌套列表的实现方式。下面的类FeedBaseGridView支持自定义列数、行数、不同行高的ui效果,需要实现类似效果的同学可以直接复制下面的类的代码到项目中,...

2019-12-16 14:47:02 2720

原创 Android【Java】类加载以及对象加载浅析

前言:在目前的市面项目开发中普遍的在使用一些大牛或者团队开源的框架可以更加保证项目产品的高效稳定迭代,比如之前说过的apk增量更新、热修复等等。在这些框架的原理里都没有绕过Android的类加载这一块,或者说也都是通过对类加载的流程做了一定的干预和插入才最终实现了想要的效果。所以今天我也抽时间再次回头学习学习类加载这块的知识。先简单介绍一下相关的概念吧。类加载器是干什么的?类的加载是由...

2019-07-12 15:59:39 884

原创 bsdiff在mac的编译与使用

前言:本文是对之前apk增量更新文章的补充内容,单独拎出来梳理一下bsdiff在mac上的编译和使用。下面的介绍流程就是我在自己电脑的操作实现步骤。第一步:下载下载请点击:bsdiff/bspatch压缩包第二步:编译先解压下载的bsdiff-4.3.tar.gz压缩包;再进入bsdiff-4.3目录,在终端下执行构建用make 命令;此时应该会报错:Makefile...

2019-07-11 15:55:42 2110 1

原创 Android之增量更新详解

前言:自从 Android 4.1 开始, Google Play 引入了应用程序的增量更新功能,App使用该升级方式,可节省约2/3的流量。现在国内主流的应用市场也都支持应用的增量更新了,最常见的应用宝省流量更新。什么是增量更新?增量更新的关键在于增量一词。平时我们的开发过程,往往都是今天在昨天的基础上修改一些代码,app的更新也是类似的:往往都是在旧版本的app上进行修改。这样看来...

2019-07-11 15:25:18 9427 3

原创 热修复Tinker 原理解析之so更新

前言:之前已经在文章中对Tinker的Dex热更新、资源热更新的源码做了分析,今天接着开始对Tinker的so热更新做源码的分析,废话不多说直接出发。Android tinker接入使用tinker之dex更新详解tinker之资源更新详解开始先回顾一下Android里面关于so的加载的两种方式:System.loadLibrary:这种方式传入的是so的名字,会直接从系统的...

2019-07-09 20:48:48 2411

原创 热修复Tinker 原理解析之资源更新

前言:之前已经在文章中对Tinker的Dex热更新的源码做了分析,今天接着开始对Tinker的资源热更新做源码的分析,废话就不多啰嗦了直接开始正文啦。Android tinker接入使用tinker之dex更新详解tinker之so更新详解一、资源补丁生成友情提示:在上篇Dex分析的文章中已经介绍了生成补丁文件的开始流程,因此这里直接从ResDiffDecoder.patch(...

2019-07-09 20:07:32 2396

原创 热修复Tinker 原理解析之Dex更新

前言:在之前已经梳理了微信的热修复Tinker的接入使用流程,这么牛逼的东西勾起了我的兴趣,因此走上了探究其实现原理的道路。Tinker支持Dex、资源文件、so文件的热更新,此次分析过程也将一步步的从这三个方面对Tinker进行源码解析,跟着我的梳理希望你也可以有所收获。Android tinker接入使用tinker之资源更新详解tinker之so更新详解在分析之前先copy出...

2019-07-09 15:29:42 1704 2

原创 Android之Tinker集成使用

前言:当前市面上为了实现不发新版本的前提下实现修改线上严重bug的目标而诞生的热补丁方案有很多,其中比较出名的有阿里的AndFix、美团的Robust以及腾讯的Tinker等等,但是其中用的比较广的还是腾讯的Tinker,所以在这里我也是选取了Tinker作为学习研究对象。tinker之dex更新详解tinker之资源更新详解tinker之so更新详解在文章开始之前先copy一个不...

2019-07-08 15:43:09 1937 2

原创 Lottie使用及源码详解

前言:Lottie对于我们安卓开发人员来说就是实现复杂动画效果的神器,越来越多的项目中使用了Lottie来实现复杂好看的动画并因此提高的动画的开发成本和效率,当然我们的项目也开始使用Lottie了。下面这些动画在之前看着感觉实现起来很亚历山大,有了Lottie就很简单了。Lottie是Airbnb开源的动画实现项目,支持Android、iOS、ReactNaitve三大平台。Lottie...

2019-07-04 20:28:37 7655

原创 序列化与反序列化(Serializable与Parcelable)

前言:这几天在考虑写点啥笔记的时候,看到了有关于序列化的代码Serializable、Parcelable接口实现,突然意识到自己很久没关注这块的知识了,所以又给重新整理了一下相关的内容,感觉这个东西还是很有用的。希望今天整理的这篇 序列化与反序列化(Serializable与Parcelable) 文章对小伙伴有所帮助。概念简介序列化 :由于存在于内存中的变量都是暂时的,无法长期驻...

2019-07-04 15:30:57 717

原创 Git 常用命令详解

前言:在现在的企业项目开发中大部分已经是使用Git作为项目版本管理工具了,当然我们公司也不例外。对于我个人来说这两年使用Git主要是通过GUI(图形界面)实现的,比如咱们安卓中的AndroidStudio Git操作,在碰见GUI不支持的功能时才是通过Git命令行实现的。以至于最近发现自己对于git命令越来越生疏了,所以今天再把git命令重新梳理一下就当是回顾温习了。废话不多说了,下面直接开始...

2019-07-03 20:12:56 352

原创 Android App启动流程详解

前言:在之前的文章中已经写了apk的打包流程、安装流程,今天就是梳理一下apk系列的最后的流程--app启动流程。经过今天的梳理以后咱们就可以对apk包是怎么编译生成的、apk是怎么被安装到安卓手机的、用户点击了桌面icon以后app是怎么启动起来的 整个流程有清晰的认知和了解了。下面先附上前面文章的传送门:apk打包流程详解apk安装流程详解在开始分析app启动流程之前,我们先回...

2019-06-26 15:26:19 31082 10

原创 Android中APK安装流程解析

前言:大家都知道,手机关机以后,就是一个冰冷的砖头,只能用来做防身的利器,但是开机后,点击桌面上的任何一个图片,都能开启一个APP,这说明在开机过程中,系统把已经安装好的APP加载到内存中,这到底是怎么做的?所以我们可以推断,在安卓系统中肯定存在这么一块区域,用于存放已经安装的APP的信息,在开机的时候,通过系统扫描,这块区域,把对应的内容加载到内存中去。其次,我们知道了在Android系...

2019-06-25 17:51:47 24129 6

原创 apk文件以及打包流程

前言:今天的文章挺简单的,也是最应该在最开始写的内容,就是简单的说明一下apk的编译打包流程,只是今天刚想到这个事。想要了解apk的打包流程的同学可以看看该篇文章。.apk文件.apk文件其实就是一个压缩文件,把文件的后缀改成.zip就可以用windows解压软件解压了,解压后里面的文件如下:上图里面都是什么文件: lib 文件夹里面存放的是so动态链接库,so动态链接库是...

2019-06-24 20:07:11 14843 6

原创 Java线程生命周期以及方法详解

前言:现在的操作系统在运行一个程序时, 会为其创建一个进程。 在进程中操作系统调度的最小单元是线程, 也叫轻量级进程(Light Weight Process) , 在一个进程里可以创建多个线程, 这些线程都拥有各自的计数器、 堆栈和局部变量等属性, 并且能够访问共享的内存变量。 处理器在这些线程上高速切换, 让使用者感觉到这些线程在同时执行。啰嗦一下进程、线程是什么?进程是指一个内存中...

2019-06-24 16:25:43 3553 1

原创 Android可收缩/扩展的TextView(CollapsibleTextView)

前言:在某些应用中,总会遇到一些类似于公告、简介、说明等长文本的TextView,但是为了排版美观等因素,我们通常是要隐藏后半部的文本,而是显示三四行的开始部分(摘要),然后在尾部会提供用户一个扩展/收缩的按钮,使得文本框可以在需要的时候扩展开来查看全文。前段时间我们的项目也需要这样的效果,就借鉴了一下网上的文章原理并做了算法优化和逻辑修改,自己实现了一个复用性还算可以的可收缩/扩展的Text...

2019-06-21 20:26:12 1947 2

原创 Android ANR(应用无响应)

前言:在Android上,如果你的应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个对话框称作应用程序无响应(ANR:Application Not Responding)对话框。用户可以选择“等待”而让程序继续运行,也可以选择“强制关闭”。所以一个流畅的合理的应用程序中不能出现anr,而让用户每次都要处理这个对话框。因此,在程序里对响应性能的设计很重要,这样系统不会显示ANR给用户...

2019-06-21 16:26:08 17203

原创 Android反射机制(Reflection)

前言:在前面EventBus的源码分析过程中,在进行注册过程的源码中关于获取类的信息和注解的方法信息是靠反射实现的,最终相应事件调用的执行方法也是靠反射实现的。所以今天的这篇文章是单独拿出来讲反射机制的,希望对想了解反射知识的伙伴可以有所帮助。为什么需要反射?Android 系统在设计的时候,出于安全和架构的考虑,利用了 Java 权限相关的东西(private,package等等,以及 ...

2019-06-20 20:18:50 1621 1

原创 Android 观察者模式(Observer And Observable)

前言:在平时的项目中设计模式用的比较多的其中一种就是观察者模式,在前面的文章中写到过的EventBus、otto都是属于观察者模式的第三方开发框架。但是android中jdk也有相应的api来实现自己的观察者效果,就是Observer And Observable,今天这篇文章就是主要来介绍使用这两个类来实现自己的观察者模式的。观察者模式定义定义一个被观察者和多个观察者,每当被观察者变化,...

2019-06-20 15:27:02 6329

原创 EventBus源码解析

前言:在现在的android项目开发小伙伴们越来越多的在使用EventBus了作为事件的同步了,EventBus是针对Android优化的发布-订阅事件总线,简化了Android组件间的通信,以其简单易懂、优雅、开销小等优点而备受欢迎。所以在之前已经整理了EventBus与Otto使用和区别之后,我最近再次梳理了EventBus的源码原理。友情提示:该篇文章主要是介绍梳理EventBus的源码...

2019-06-19 21:21:33 210

原创 Android开发之MVP模式

前言:在之前的开发中一直用的是mvc模式搭建的项目,所以我对于mvp也一直只是停留在理论和demo阶段上。正好现在的项目是被小伙伴借助dragger搭建的mvp模式的结构,所以就想着总结整理一下mvp模式的东西并写出来,也算是作为自己使用了mvp模式的标志。本文会先简单介绍一下几个常用的项目搭建模式,当然侧重点还是后面的mvp详解。常用的几个模式:MVC、MVP、MVVMMVC对于MV...

2019-06-19 15:23:25 6138 2

原创 Android 屏幕(View)刷新机制(原理)

前言:在平时开发项目的时候我们都知道生成一个view加入到window中,或者对显示的view调用其属性改变的方法亦或者启动在某个view上配置的动画就会让屏幕进行刷新达到自己想要的ui效果。但是咱们的代码是怎么触发屏幕刷新或者说系统是用怎样的机制去刷新屏幕改变的view属性的很多人还是不太清楚。当然最开始我也是没有系统的梳理过,前段时间经过对一些文章博客的阅读和系统源码的梳理我才有了较为清晰的感...

2019-06-17 19:46:21 10039 14

原创 EventBus和Otto的故事

前言:在以前的项目里面一直用的是EventBus在页面间发送传递事件替代从而替代经典的广播的使用,但是在新的项目里小伙伴选择了使用Otto,既然是合作嘛我也就看了一下Otto的使用方式就直接开始使用Otto了。这几天抽时间看了一下行业技术的情况,发现EventBus和Otto是解耦框架的主流,大家基本都是使用的这个两个的其中一个,所以整理了一下他们的特性和差异。友情提示,该篇的主要目的是介绍E...

2018-11-16 15:53:32 504

原创 Android之allowBackup属性

前言:公司平台对我们的项目做了安全检测,然后就给我们部门报了一个安全漏洞的问题,就是在AndroidManifest.xml配置文件中没有设置allowBackup标志,因为allowBackup的默认值为true,所以这个高危风险漏洞就是指的在AndroidManifest中allowBackup设置为true了。很多产品我想如果没有危险扫面警报的时候都是设置为true了,所以我今天想着好好介绍...

2018-11-14 20:34:18 65928 6

原创 Android P(版本27以上) 网络请求http限制

前言:最近开了新项目,所以用了最新的android studio 也把gradle和android sdk用了新的版本来开发。但是用网络请求okhttp3请求数据的时候会有失败,查看相关文档找到了原因和解决方案,所以才引出了今天的这篇文章。网络请求失败的错误日志先给出来:java.net.UnknownServiceException: CLEARTEXT communication *...

2018-11-14 17:32:02 11395 1

原创 Android 性能优化之TraceView分析

前言:前两天接到了优化我们项目进入二级页面速度的任务,才突然发现一直忙着pm定的各种业务需求,好久没有去专门做性能方面提升的工作了。就自然的选择了用TraceView来分析卡顿的原因,在这次优化算是结束的时候我想着就当是作为对经典又好用的TraceView致敬从而写了这篇简单大众的文章。先给需要的小白科普一下,TraceView是什么?TraceView 是 Android 平台特有的数据...

2018-09-06 20:15:24 535

原创 Android TextView设置自定义字体

前言:这个版本的开发中,伟大的ue们重新给了新的字体文件让我们给换上,做法很简单,我自然就给换上了,但是这次不同以往的是出了一些效果的问题,所以就当记个笔记写出了这篇很low的文章。以下为笔记的写法,允许吐槽,欢迎吐槽。。。Android TextView怎么设置自定义字体呢?很简单:1.将下载好的字体库放入到 asset下面,类似下面图片:2. 获取字体 : Constant...

2018-08-21 20:21:33 12524 1

bsdiff-4.3.zip

android apk增量更新,用于在mac实现差分包生成以及合并的工具包 bsdiff/bspatch。

2019-07-11

Android视频剪切拼接背景音乐字幕等功能的demo

用于 Android平台的对mp4 视频 的 剪切 拼接 添加背景音乐 字幕 分离声音 等 的demo,使用简单,性能良好

2017-11-10

windows 64 最新的node.js安装包---开发react native 必备

windows 64位系统的最新的node.js安装包,用于reac native 的开发

2017-11-09

自定义带进度条的圆形头像

该包里面是圆形头像附带圆形边框进度条的项目代码,可以实现在基础功能--圆形头像,圆形进度条,进度图标,进度文字提示的基础功能上做任意的修改扩展。

2011-04-30

空空如也

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

TA关注的人

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