自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(46)
  • 资源 (2)
  • 收藏
  • 关注

原创 Android DI框架-Hilt

是一种思想,并不是特指一种技术实现,目的是要解决Java 开发领域,对象的创建以及管理的问题,是一种软件设计思想。控制:指的是对象创建(实例化、管理)的权力。在哪里创建,由‘’谁”创建反转:控制权交给外部环境(Spring 框架、IoC 容器传统的开发方式:当一个类里面需要用到很多个成员变量时。传统的写法,这些成员变量,都需要new出来!使用 IOC 思想的开发方式。

2023-10-18 16:36:27 270

原创 Lifecycle你真的懂了吗?

Lifecycle生命周期感知型组件,用来执行操作来响应另一个组件(如 Activity 和 Fragment)的生命周期状态的变化。本文Lifecycle版本为2.2.0:implementation ‘androidx.lifecycler:lifecycle-common:2.2.0’ //22.2.23 更新 2.5 ,2.2是用的比较多的版本你真的了解Lifecycle了吗?Lifecycle使用非常非常简单。默认你已经使用过Lifecycle。但如果我问你以下几个问题。你能回答出

2022-04-06 13:12:32 414

原创 全方位解析-Android中的线程池

笔记文章,没有废话,句句关键线程池的优点重用线程池里的线程,避免创建和销毁线程所带来的性能开销有效控制最大并发数,避免造成线程间抢占系统资源而造成阻塞提高线程可管理性,可以统一进行分配,调优和监控的能力Android中的线程池复用Java中的Executor接口,具体实现类为ThreadPoolExecutor,它有一下几个参数:参数说明注释corePoolSize线程池中核心线程数量一直存活,即使处于闲置状态maximumPoolSize最大能创建的.

2022-03-20 16:22:21 4015

原创 一图抵千言《ARouter简明扼要原理分析》

配置Kotlin项目:module App:apply plugin: 'kotlin-kapt'defaultConfig{ javaCompileOptions { annotationProcessorOptions { //AROUTER_MODULE_NAME必配项 用于拼接生成文件名 AROUTER_GENERATE_DOC // AROUTER_GENERATE_DOC = enable 生成Json文档 // 生成的文档路径 : build/genera

2022-03-11 17:52:22 2954

原创 Navigation深入浅出,到出神入化,再到实战改造(三)

改造Navigation目标:摒弃xml文件,用注解的方式管理路由节点。利用映射关系,动态生成路由节点配置文件改造FragmentNavigator,替换replace(),使用show(),hint()方式,路由Fragement自定义注解处理器1. 配置gradle配置//生成Json文件工具类api 'com.alibaba:fastjson:1.2.59'//注解处理器配置工具 api 'com.google.auto.service:auto-service:1.0-rc6

2022-03-09 01:36:23 540

原创 Navigation深入浅出,到出神入化,再到实战改造(二)

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

2022-03-09 01:22:30 885

原创 Navigation深入浅出,到出神入化,再到实战改造

思考几个问题:可以在代码中用Bundle传递参数,为什么要在XML去配置XML中的参数标签,只能设置和读取,到时无法在XML中跳转是附带传过去,如B页面要求传入name:String,于是在标签中配置,但A去跳转时,无法在XML中传入,只能在代码中定义参数名称和值,那么XML的参数还有何意义?有什么实用的场景?navigationUp和popBackStack()回退上一级时有什么区别,该如何正确实用跳转时 有时用的是Action的ID,有时用的是Fragment的ID 他俩到底在什么场景下,区分

2022-03-07 23:51:51 888

原创 读书笔记--Android系统启动

本文为读书和博客学习笔记,记录将知识总结自己理解的方式。可能存在错误。文末会给出相关参考链接1. Android系统概括1.1 Android系统架构整体认识上图可以看出,Android系统大致可以分为5层(这个分层是主观的,并不准确),自顶向下依次介绍。应用层(System APP)这一层主要就是系统APP和非系统APP(也就是开发者开发的APP,如抖音,微信等)主要是Kotlin + Java框架层(Java API Framework)供应用层直接调用的Java API,系统A

2020-07-20 21:47:20 261

原创 归并排序 O(nLogn)

归并排序归并排序的思想是分治法+回溯,将一个无序的数组先按照原来的一半进行拆分,一直拆分到最后一个元素,然后开始回溯,排序开始的过程是再回溯时开始排序的。思想总结:将源数组进行拆分,每次拆分一半,由图可以分析出,当arr.length=n,需要拆分log2^8=3次。当拆分到不能再拆分,也就是分组到每个组只有1个元素,停止拆分开始排序并回溯排序,每次排序的时间复杂度为O(n)总的时间复杂度为n x log2^n,时间复杂度不考虑系数和底数,所以n x log2^n等价于 O(nlogn)

2020-07-20 21:46:12 661

原创 快速排序

快速排序思想快速排序号称20世纪最伟大的十大算法之一,也是nlogn级别的排序算法,它的思想是类似冒泡排序,是一种交换排序,同时加入分治法。上图中我们选取待排序数组第一个元素为基准元素,通过比较交换,将比基准元素小的元素放在左边,比基准元素大的放在右边。那么此时基准元素(紫色元素),就放在了最终排序后数组应该在的位置。然后通过同样的方式,将左边(绿色)和右边(橙色)部分排序。过称如下:每轮分成3个步骤:选取基准元素基准元素方法排好序后的位置继续拆分,直到剩下一个待排序元素如何编码 ?

2020-07-20 21:45:35 109

原创 数据结构与算法 基础排序(O(n^2))

选择排序1. 选择排序思想:开始将i=0,作为最小值minIndex开始与剩下的所有值比较如果比minIndex对应位置的值还小,交换位置当minIndex与后面所有的值比较后,此时minIndex对应的值就是最小值将minIndex与 i(表示现在排序到那个位置) 交换位置2. 代码实现 public static void selectSort(int[] arr){ if(arr.length==0) return;

2020-07-20 21:45:03 178

原创 Android中的AES加密-下

本文为笔记,记录,写记录后为了方便查阅也为了能更好的记住参考什么是AES算法?前言本章主要是针对AES加密的原理过程进行梳理。不在于细节,了解各个参数和类的功能来帮助我们再加密是更好的选择如何使用加密。1. 加密过程1.1 机密核心代码(包含但不仅紧限于)这段代码上文中我们也说过了,大致的核心加密过程就是这些,只不过,在Android要适配不同版本对应的SecureRandom获取方式不同和用KeyStore存储密钥。(SecureRandom这个类其实相当与加盐,将原文密钥经过一些特定的随

2020-07-20 21:44:15 877

原创 Android中的AES加密--上

前言最近需要一个加密一下用户信息,想到用到AES,加密,没想到苦难重重。第一版随便上晚上找了一下代码如下: //偏移量 public static final String VIPARA = "1234567876543210"; //AES 为16bytes. DES 为8bytes //编码方式 public static final String CODE_TYPE = "UTF-8"; //填充类型 public static final Str

2020-07-20 21:43:33 459

原创 一天入门Kotlin学习笔记(七)-泛型

文章目录前言逆变与协变Kotlin中的协变与逆变协变 :泛型类型与实参的类型的继承关系相同逆变 泛型参数的继承关系与类的继承关系相反不变 类型必须保持一致 泛型之间没有关系星投影 其本质就是类似Java中通配符 ?reified 关键字inline关键字的作用结语前言这节我们说下Kotlin的泛型。首先默认大家对Java泛型有个基本的认识,如果 不熟悉Java的泛型,可以阅读文章,或是看下J...

2019-12-18 19:30:36 168

原创 一天入门Kotlin学习笔记(六)-反射

文章目录前言在Kotlin中调用JavaApi实现反射1. 获取Class类2. 在Kotlin中使用Java反射API3. 在Kotlin中利用Java反射获取Kotlin类中的成员使用Kotlin反射库来实现反射反射的缺点结语前言这一节为Kotlin反射,主要是在Kotlin中时用Java-Api来实现反射,使用Kotlin本身支持的反射API进行反射。还有2者的对比。要是对Java的反射...

2019-12-18 19:30:19 568

原创 一天入门Kotlin学习笔记(五)-常见高阶函数

文章目录前言mapflatmapreducefoldjoinToStringfilter/takeWhile尾递归优化闭包复合函数柯里化函数(currying) -函数的链式调用偏函数结语前言这一节我们主要说下Kotlin中关于数据集合中的常用高阶函数mapmap是遍历一个数组遍历的过程可以对数组item进行操作(筛选、数据转换等) ,返回一个新的数据集合例子: val list = ...

2019-12-17 11:08:09 236

原创 一天入门Kotlin学习笔记(四)-面向对象

文章目录前言接口抽象类可见性修饰符object类关键字伴生对象与静态成员方法重载扩展方法属性代理数据类内部类枚举类密封类结语前言本章将讲解一些管对对象和基础编程的知识。如:类,接口,抽象类,数据类,扩展方法等接口其实这部分的设计思路和Java基本一致。这里主要说下Kotlin特有的属性abstract class Manager : Driver, Writer { overri...

2019-12-17 11:07:49 203

原创 一天入门Kotlin学习笔记(三)-程序结构(下 )

文章目录前言操作符重载(运算符重载)表达式(中缀表达式,分支表达式,when表达式)默认参数 变长参数 具名参数结语前言继续讲下程序结构,这部分相对简单,有时候可能会比较啰嗦,笔记嘛!就是在学习过程中我遇到的问题,作为记录。大家没有遇到问题更好。有些是个人理解,有更好的理解欢迎在评论。操作符重载(运算符重载)这部分官网还是比较好理解的,而且还是中文操作符重载建议去看下 举例:class ...

2019-12-13 15:05:18 145

原创 一天入门Kotlin学习笔记(二)-程序结构(上 )

文章目录前言常量与变量函数Lambda表达式成员方法和成员变量结语前言上节我们主要讲了Kotlin的数据类型,这节我们主要从程序结构,包括方法,类成员,运算符的角度去认识Kotlin常量与变量上一节我们已经用到了用val,var来修饰属性。这节我们详细总结下:常量(val)val=value,值类型类似Java的final不可能重复赋值运行时常量: val x = getX(...

2019-12-13 15:04:52 160

原创 一天入门Kotlin学习笔记(一)-数据类型

文章目录前言推荐学习资料数据类型1. Boolean类型2. Number类型3. Char类型4. String类型5. 类与对象6. 空类型7. 智能类型转换8. 区间9. 数组结语前言本系列文章作为学习简单的学习笔记,其目的在于2个:记录自己学过的知识本着分享交流的原则分享本系列适合完全没有学过Kotlin并且像快速入门的同学,本人现在也是在学习中,所以作为笔记难免会有错误,如...

2019-12-13 14:57:28 225 1

原创 史上Android最强面试复习资料总汇

前言最近在准备面试,然后复习下之前写过的项目,书籍,笔记,文章。一看很多知识点都没有印象,最可拍的是连自己为了防止忘记写的文章竟然都感觉不是自己写的。有些开始怀疑人生了。好了,废话少说,现在是求职高峰期,我把我收集到的资料分享给大家。也祝到家有个好工作。(本文资料 适合1-3年)Java相关复习资料JAVA基础面试题Android相关复习资料Android面...

2018-03-12 22:06:28 863 4

原创 自定义View(十)-View的事件分发机制

前言关于自定义View系列的文章,好久没有写了。今天抽空看了下Android开发艺术探索。正好看到了View的事件分发机制,所以将它写成笔记记录下来。 关于View的事件分发,我起初是学习郭神的2篇文章。感觉其实也没有什么。大致也就了解下。不过看完其他很多优秀的文章和书籍后,才知道自己too young too simple。下面我们就一起来分析下Android的时间分发机制。 关于事...

2018-02-11 22:13:06 396

原创 Tinker-自定义扩展与流程分析(下)

前言上一篇我们讲解了Tinker的使用,现在我们讲解下一些功能的扩展与冲源码角度查看流程分析。功能扩展在扩展功能之前我们要先来了解下。我们可以扩展那些功能。下面我们重Tinker的初始化函数入手。修改TinkerManager代码如下: /** * 完成Tinker初始化 * * @param applicationLike

2018-02-06 13:46:59 441

原创 Tinker-使用教程与原理分析(上)

前言前面我们讲解了AndFix的使用,这篇我们来讲解下微信的Tinker热修复,相比AndFix,Tinker的功能更加全面,更主要的是他支持gradle。他不仅做到了热修复更实现了“热更新”。既然他这么强大,下面我们就来了解他是如何使用的。命令行生成补丁文件在学习AndFix时由于它不自持Gradle,所以我们在生成补丁文件时是需要命令行去生成的。然而Tinker不仅支持Gr

2018-02-06 13:45:34 825

原创 AndFix的使用分析

前言最近发现热修复比较火,很多文章也做了介绍。所以自己也简单的学习下。因为自己在实际项目中用到。所以为了防止忘记,写成博客做成笔记,同时也帮助一些没有接触过的小伙伴能快速使用与入门。废话少说。进入主题。 热修复的概念上面是热修复。简单解释就是在线更新。比如我们已发布的应用突然产生了严重的BUG,按照旧方法,只能能下一次版本修复后重新发布。然后用户重新去下载。这样其实给用户的

2018-01-14 21:25:06 303

原创 深入浅出,一篇文章让你学会Dagger2使用

本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布前言最近在做项目中,用到了Dagger2,所以找了一些博客并参考了菜鸟窝Ivan的视频,算是知道如何使用了,但是对其理解还相差很远。所以这篇文章重点针对如何使用和使用中常见的一些问题。 本文由上下2篇文章整合在一起。可能有些长,但是读起来会很爽Dagger2根据官网来说他就是一个快速的依赖注入框架。如果对依

2018-01-06 19:05:11 2775 5

原创 自定义View(九)-View的工作原理- View的layout()和draw()

前言上一节我们将View的测量流程理的差不多了,这篇我们来看下View的剩下的2大流程layout(布局)和draw(绘制)。相对测量来说,布局与绘制就简单了许多,所以我们将这的两大流程放在一起讲解。 performLayout()布局 由上上篇我们知道,布局是从ViewRootImpl#performLayout()发起的,那我们进入这个方法看一下: private void perfor

2018-01-03 22:56:59 379

原创 自定义View(八)-View的工作原理- View的measure

前言从上一篇中。同Activity的布局加载了解了整个View树加载的流程。最后是通过View的三大流程来实现布局的显示的。那么我们这篇来讲下布局的三大流程之一–>measure。1.MeasureSpec 在讲解测量之前我们要先清楚什么是MeasureSpec?MeasureSpaec可以理解为测量规格。在View.measure()中多次被用到。它是有一个32位的int值,高2位代表SpecM

2018-01-03 14:50:37 311 2

原创 自定义View(七)-View的工作原理- Activity的布局加载

前言前面几篇对动画可以说是做了非常全面的总结了(上篇文章最后的4种ViewGroup相关动画相信在了解基础后看些文章也不会太难理解)。在View的工作原理 这一部分我们将对View做全面深入的解析。由于本人是菜鸟,其实无法直接看源码,也都是通过书籍与文章反复阅读,然后才去看的源码。由于怕忘记写成博客。希望和我一样不了解的朋友能在自定义View中不那么迷茫。如果那里有错误大家一定指出我将不胜感激

2018-01-03 14:49:32 1465 2

原创 自定义View(六)-动画- AnimatorSet与XML设置属性动画

介绍AnimatorSet是组合动画,前面在ObjectAnimator.ofPropertyValuesHolder(),时也可以做到控制多个属性做动画,但是.ofPropertyValuesHolder(),仅仅是将多个属性同时做动画却无法灵活控制每个属性的播放顺序,针对的是一个控件,而AnimatorSet是组合动画。更侧重的是在多个动画播放时对动画的控制(可以控制动画的顺序,延时,同时可以控

2018-01-03 14:48:29 2054

原创 自定义View(五)-动画- ObjectAnimator

介绍ObjectAnimator是派生自ValueAnimator的。所以ValueAnimator中所能使用的方法,在ObjectAnimator中都可以正常使用。但是已经有个ValueAnimator为什么还要加入ObjectAnimator.因为ValueAnimator是通过调用监听,得到变化的值来做动画的。而ObjectAnimator可以针对某一个控件的某个属性直接做动画,而不需要设置监

2018-01-03 14:47:35 739

原创 自定义View(四)-动画- Interpolator与Evaluator

介绍Interpolator插值器之前我们已经接触过了,而Evaluator好像我们还没有将,这是属性动画中俩个比较中的两个知识点,弄清楚它们有助于我们更好的使用与理解属性动画。 Interpolator插值器分析 之前我们已经明白了它的作用了,他就是一个控制动画如何运动的一个工具。比如有匀速效果插值器,回弹效果的插值器等等。现在我们就来从源码的角度分析下看看他是如何实现的。我们以Lin

2018-01-03 14:46:55 268

原创 自定义View(三)-动画-属性动画ValueAnimator

前言之前我们把视图动画(也就是View动画)分析的差不多了,当然帧动画我们没有讲解,其实帧动画比较简单,就是通过顺序播放一系列的图像从而产生动画效果,可以简单理解为图片的切换。和我们小时候玩的翻书让物体动起来是一个道理。它使用起来也比较简单。所以我们就不单独拿出来讲解。到后面我们会用到时再去简单讲解。这篇我们继续来学习动画之属性动画(Property Animator)。 介绍我们在第一篇文章的时

2018-01-03 14:45:02 347

原创 自定义View(二)-动画- 代码生成View动画

前言上篇我们介绍了视图动画,说的确切点应该是视图动画中的补间动画(Tween Animation),关于逐帧动画(Frame Animation)用法更简单,这里先不做介绍后期再自定义View的使用会用到,到时候讲解。这篇我们来一起学习将上篇用XML实现的动画用试着用代码来生成,毕竟有些时候我们是用代码来控制动画的。代码生成动画Animation公共类 这里给大家发一个网站里面XML,类属性都

2018-01-02 20:05:46 787

原创 自定义View(一)-动画- XML生成View动画

前言感觉好久没有写博客了。首先因为最近比较忙,有在学习即时通讯相关的开源项目,好不容易忙完了。有点时间就抓紧写博客。之前学习的开源项目百篮应用已经获得360+star了。当初学习的时候没有觉得什么。虽然不是我自己原创的项目。但是也是自己一点点写出来的,也学习到了很多。所以当初的2个承诺,一个是完善功能另一个写一个学习自定义View系列文章。个人觉得第二个比较重要。因为在理解后如何去完善,是仁者

2018-01-02 20:04:48 751

原创 简单好用的RecyclerView适配器

前言给大家推荐个好用RecyclerView适配器,也就是在百篮应用里用到的适配器。为了大家学习方便,这里简单的写下如何使用这个适配器,不做代码具体的分析,有兴趣的可以自己看下源码。当然用过类似的BRAVH可能会觉得已经都这么好的工具了为何还有使用本文的适配器。我觉得有2个优点: 1. 相比BRAVH更轻量。看过源码就知道,一共用了20多个类就做到了与BRAVH基本一致的主要功能。这样会减少应用的

2017-12-25 21:54:03 2868 7

原创 MVC、MVP、MVVM的理解与使用

前言对于MVC、MVP、MVVM,这都是Android开发的一种架构,随着日积月累的开发,很对人对这几种模式是再熟悉不过了。不过当初我在学习的时候是因为看一个开源项目的源码是MVP架构的,也找个很多文章,发现很多文章不是全是概念,就是解释的含糊不清,所以写一篇文章来分享,让像我一样的小白可以快速理解这几种架构模式。MVCMVC全名 Model View Controller 模型(model)-视

2017-11-15 21:26:24 669 5

原创 GreenDAO快速入门

前言之前在自己做项目的时候,用到了GreenDAO数据库,其实对于数据库辅助工具库从OrmLite,到litePal再到GreenDAO,总是在不停的切换,但是没有真正去了解他们的差异。只停留在会使用的阶段。说起来也是惭愧。本文的重点也是在于如何快速使用。不会进行较深的探究。GreenDAO:介绍:对象关系映射的数据库(ORM)

2017-11-15 21:24:03 342

原创 给你不一样的引导页

前言最近在学习一些开源项目,无意中看到一个很不错的引导页效果,实现起来也比较简单,所以在这里分享给大家。先看下效果图: 看着比普通的图片引导页是不是要好上一些呢?实践其实,这个效果实现起来还是比较简单的。主要是运用到了ViewPager的setPageTransformer(),这个方法。具体的方法讲解我在这里就不过多的介绍了,等下面用到的时候会简单说下。那么我们先来看下整体的时间流程。 其

2017-11-03 08:55:07 476 1

原创 基于zxing的二维码扫描

前言现在的应用中二维码扫描已经成为一个应用必不可少的功能,现在大部分Android二维码扫描都是基于zxing和Zbar,这文章就来介绍一下基于zxing的二维码扫描。先看下效果图 虽然现在的关于二维码的文章有很多,但是很多都是交我们怎么使用,在使用的时候我也遇到了很多问题,比如。UI界面太丑,没有用的文件太多,扫描太慢,版本太老。本Demo使用的是3.x的是比较新的版本。我用的小米2A(api=

2017-10-20 22:36:18 738

利用ViewPager的setPageTransformer()添加自定义引导页动画

利用ViewPager的setPageTransformer()添加自定义引导页动画

2017-10-25

Android应用自动更新

Android应用自动更新,后台服务下载,前台Notification通知下载进度,下载完成自动安装

2017-10-19

空空如也

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

TA关注的人

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