自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

成长的烧年

stop stopping!!!

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

原创 使用Android Studio创建创建Groovy类编译后没有生成class文件

解决AS写groovy无法生成class文件的问题

2022-06-26 10:38:30 255

原创 Groovy基础语法整理

简要解释Groovy的基础语法,忘了再过来补一下。

2022-06-18 10:21:16 49

原创 解决Android Studio com.google.common.collect.ImmutableMap.hashCode 造成的StackOverflowError异常

解决Android Studio 编译出现StackOverFlow异常。

2022-05-28 11:54:29 525

原创 【Jetpack系列】理解LiveData的粘性事件,并去除

理解LiveData粘性事件的原理,并通过原理解决问题。

2022-05-22 19:11:36 1164

原创 Retrofit+OkHttp 参数使用AES加密Demo

最近在做App代码安全方面的优化,特此记录一下。我们现在App大多数都是基于Retrofit+OkHttp的网络请求框架,现在的需求是需要将请求的参数进行加密传输,下面图片中我们进行一个对比,一个是明文传输,一个是密文传输:明文传输密文传输由于考虑到加密和解密的效率,我们现在选用的是AES对称加密。至于对称和非对称加密,可以参考以往的[文章]。(https://blog.csdn.net/u013762572/article/details/88733982)1. 客户端修

2022-05-22 12:47:03 527 1

原创 Hilt加强篇:理解Component和Scoped

1. 历史上次写过一遍关于Hilt的使用偏,里面详细介绍了Hilt历史和应用,链接对应如下:Android Hilt 使用如果没有对Hilt的使用有些了解,那就先入门看看,谢谢。2. ComponentComponent和Scope的英文名分别是组件和范围的意思,第一次见到这个两个注解的时候,还是有些不清楚的。下面慢慢说,Hilt-Android中存在8个Component和对应的8个Scope,先来聊一聊这个8个Component,分别为:序列名称创建时间销毁时间1S

2022-05-15 16:41:26 343

原创 升级新版本Android Studio之后找不到了插件classpath的位置

最近手残升级了Android Studio到新版Android Studio Chipmunk,发现gradle版本升级到了7.4.2, gradle 插件版本升级到了7.2.0-alpha05. 本来没什么问题,但是今天要加入Hilt这个第三方库,问题来了。大家知道Hilt这种巨牛叉的第三方库一般都是ASM + APT + 注解 + 反射 + 动态代理 这些底层的基础知识构建的。因此在使用到APT时,就需要使用到相关的gradle插件了。平时我们使用Hilt也就两步:加入hilt-android-

2022-05-14 22:33:01 3734 4

原创 Kotlin + Dagger2 出现 Dagger does not support injection into private fields 解决方案

Dagger2在Kotlin环境下出现Dagger does not support injection into private fields.

2022-05-08 22:42:52 948

原创 Activity#onActivityResult被弃用了,该怎么办?

1. onActivityResult弃用现象和解决方法前几天更新了AndroidX之后,项目中的onActivityResult就被声明为@Deprecated,大概如下图:由于本人呢,是一个代码洁癖者,看着这个肯定不会很舒服,苦于没有时间,就没有仔细去好好分析,就放在一边呢。今天有点时间,我们就来扒一扒,看看onActivityResult是如何被弃用了,现在又该如何解决呢?其实,我们点击Activity#onActivityResult的源码的时候,就可以看到它自己说明的解决方案:在An

2022-05-07 17:34:49 1432

原创 彻底解决Android Studio Minimum supported Gradle version is X.Y.Z. Current version is x.y.z.问题

  由于Android Studio 是基于Gradle 编译的,面对众多的Gradle版本,类似于Android碎片化的概念,在编译项目上或多或少会存在兼容性问题。如题,Minimum supported Gradle version is 6.1.1. Current version is 5.6.4...,Minimum supported Gradle version is 6.7.1. Current version is 5.6. If using the gradle

2022-05-02 16:58:22 4005 1

原创 解决新版Android Studio新签名出现Key was created with errors快速解决方案

解决Android Studio 新签名出现的 Key was created with errors文件

2022-04-22 08:47:26 2024

翻译 Glide VS Coil

原文地址:https://medium.com/healthify-tech/coil-vs-glide-3f488f4de72a在这篇文章中,我们将会对Glide 和Coil做一个对比,来理解一下到目前为止,哪一个图片加载框架是更好的。Glide是一个Android平台的快速高效开源的图片加载框架,现在有很多人在使用它。然而Coil作为一个新的图片加载库在近些日子也越来越受欢迎。两个库的基本功能是相同的;它们都是使用BitmapFactory来解析数据,然后使用相同的Android SDK来从文件中

2022-01-26 18:05:05 599

原创 DataStore的基础用法

0. 简介Google在推出JetPack组件以来,一直推荐我们使用DataStore组件替代到我们第一天学android就知道的SharedPreferences组件,原因很简单,因为当年的SharedPreferences存在居多的问题,DataStore就是为了解决这些问题而来的。1. SP的缺点至于 SP到底存在哪些问题,我们可以直接查看 DataStore源码上的注释:Synchronous API encourages StrictMode violationsapply() an

2021-12-18 12:33:55 5236 2

原创 Android 10以上,保存视频通知到相册

代码如下:public static void videoSaveToNotifyGalleryToRefreshWhenVersionGreaterQ(Context context, File destFile) { ContentValues values = new ContentValues(); Uri uriSavedVideo; if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {

2021-11-27 22:01:56 2777 4

翻译 Android MVI 架构简介

翻译来自 Medium :https://medium.com/@soundhar.p03/android-mvi-architecture-230cd30e40b4大家有时间和精力可以阅读原文,翻译可能不怎么到位,到时候网批评指正。大家好,在本篇博客中,我们就会讨论有关Andorid的MVI设计模式。近些日子有关Andorid架构模式都在逐步进化中。对于我们开发的App中,我们开始面临新的挑战和困难。新的设计模式将会被发现来解决类似的问题。作为Andorid开发人员,我们已经拥有了MVC、MVP

2021-11-27 20:45:35 1216

原创 不看lifecycle源码,认真聊聊它的实现原理

目录1. lifecycle 简介2. lifecycle 用法3. lifecycle 原理1. lifecycle 简介  在我们的日常开发中,使用Activity和Fragment 产生的内存泄漏问题比比皆是,主要是原因就是这二者存在生命周期,在走完这一辈子的过程中,有些引用一直抓着着Activity和Fragment不放,等到它们Destroy的时候,依旧引用着它们的尸体,导致不能被回收,因为尸体将一直存在于内存中,导致可用内存减少,然后内存泄漏就开始了。当然了,扯远了,Go

2021-11-16 20:48:41 498

原创 Gson源码解析

文章目录基础了解几个重要的概念1. 属性赋值/序列化2. Java类型适配器3. JsonReader源码分析1. Gson初始化2. 源码分析3. 整体回顾ObjectToJson后记基础了解最近在解决一个Json解析时,把Gson原理过了一遍。Gson是Google开发的Json解析库,当然这种轮子市面上比较多,也不一一列举了。今天主要来聊聊Gson源码,是如何解析一个Json对象,然后按照葫芦画瓢,将一个Java对象如何序列化成 Json对象。几个重要的概念在分析Gson源码之前,首先需要在脑

2021-08-27 17:29:41 363

原创 Android Hilt 使用

文章目录a. 关于 Hiltb. 添加依赖项c. Hilt 应用1. HiltAndroidApp 注解2. 注入Android类3. 如果注入接口4. 如果注入的对象不能new5. @ApplicationContext 和 @ActivityContext6. Android类生成组件i. 全局单例模式ii. Activity内多Fragment共用组件d. 资料a. 关于 Hilt首先 Hilt 是 Android 的依赖注入库。什么是依赖注入?简单点理解就是Java中我们使用对象时,需要去 ne

2021-08-14 20:59:03 2358

原创 并发编程之ArrayBlockingQueue

最近在学习并发编程,在看队列,今天先上一篇 ArrayBlockingArray。文章目录队列的概念:阻塞队列:ArrayBlockingQueueArrayBlockingQueue 构造方法队列操作方法1. `add`方法2. `peek`方法3. `put` / `take` 方法4. `offer` / `poll` 方法5. `offer(E e, long timeout, TimeUnit unit)` / `poll (long timeout, TimeUnit unit) `队列方法

2021-06-17 17:01:23 117 1

原创 :app:kaptSgb_debugDebugKotlin 报错

具体报错内容为:Execution failed for task ‘:app:kaptSgb_debugDebugKotlin’.A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptExecutionjava.lang.reflect.InvocationTargetException (no error message)主要是使用了apply plugin: ‘kotlin-kapt’

2021-01-07 13:31:24 406

原创 聊聊RecyclerView的像素级刷新

需求来源当前我们所做的内容是施工管理的工具APP,有非常重的聊天系统,而且聊天系统中由于项目数比较大,大到什么概念呢?一个中层管理手中大概存在500个项目,每个项目分为施工群和业主群,然后加上公司OA群,设计群,管理群,大概在1000个群左右,当然你可能会说,1000个群也不算太大吧,我微信现在的群都有上千个,的确是这么个理,但是我们这1000个群每天都在发消息,业主要求推动施工的进程,假设每个群每天发10个消息,我们大概每天就有1w条消息,这是个很惊人的问题。所以问题就来,在上千个列表中,对Recycl

2020-11-29 13:58:35 184

原创 Hilt 提供依赖实例时,报了Types may only contain one @Inject constructor

项目场景:在使用Hilt提供依赖实例时,代码这么写的:class HelloTwo @Inject @JvmOverloads constructor(private val data: String = "data") 然后编译报错:Types may only contain one @Inject constructor问题描述:反编译了一下,查看最终java的代码:发现@Inject注释在两个构造函数上了,这样Hilt在依赖构建时,就不知道使用哪个好了。但是

2020-11-25 14:49:28 464

原创 聊聊Kotlin的委派(一)

基本目录1. 类的委派2. 实现源码3. 委派属性4. 实现源码5. 总结有种完成工作的方式就是把工作委派给其他人。当然我并非讨论的是,你将你的工作委派给你的朋友,而是将你的工作从一个对象委派到另外一个对象,质量有守恒定律,同样工作必须有人去完成。你猜怎么着,委派在软件行业并不是一个新兴的模式。委派是23种设计模式中的一种,具体对象通过委派给一个助理对象来处理相关的请求。委派对象代表原始对象来相应请求的处理,并使得处理的结果被原始对象所使用。Kotlin通过提供对类和属性的委派使得使用kotlin来创

2020-11-12 20:54:22 188

翻译 当你还在用 Gson 时,Square那帮人已经开发出了 Moshi 了!!

原文地址:好久不见,曾经我们相处得很好,但是是时候说再见了。在你的朋友圈中也许会听到这样的语句(也可能没有),但这并非是本篇文章的主题,我们要谈论的是一个新的关于 Android 和 kotlin 序列化框架!我们需要将 Gson 迁移到 Moshi上面了。当我们谈论为啥Moshi是更优秀的框架,或者怎么迁移到 Moshi之前,我们先来了解一下今天的 Gson 的发展。Gson,what?当我们查看 Gson 的github仓库时,它是这么描述的:一个Java 的序列化/反序列化框架,用来

2020-11-02 23:26:53 1073

原创 解决 Google Play 支付问题:In-app billing API version 3 is not supported on this device

项目场景:因为想出海看看外面的世界,第一次上线Google Play产品,需要添加Google Play赚美刀,使用的是Google Play Billing框架V3版本,所使用的的机器是 Google Pixel 3XL, 系统是当前最新的 Android R(当前时间2020/09/08), 依照Google中文开发文档 https://mp.weixin.qq.com/s/QQg4ttdnn6XLrOBZIDsEQA ,发现在开发的过程中,存在In-app billing API version 3

2020-09-08 23:12:43 10742 9

原创 Jetpack系列之 Paging 详解

  在此之前,我一直对Jetpack的Paging感觉到很迷茫,单单一个分页为啥 Android 官方会出一个组件? 在我们眼中,分页不就是添加两个参数pageSize和pageIndex 么?这么简单逻辑Android官方能耍得起什么样的波浪么?带着这个问题,阅读了一些文档,加上自己的理解,然后有了这篇文章。基本原理Paging目前来说,是需要和RecyclerView配合使用的,毕竟Android 目前展示列表数据,差不多就是RecyclerView了。首先简单介绍一下Pagin

2020-08-02 15:42:17 2509

原创 理解Room数据库的迁移(Migration)

文章目录数据库迁移的引擎SQLite API 都干了些啥Room 都干了些啥迁移 SQLite API 代码 到 Room情景一:保持数据库版本不变 --- app崩溃第一步:尝试打开数据库情景二:版本更新了,但是没有提供迁移策略 --- app崩溃第一步:更新数据库版本从1(已经安装到设备上了)到2情景三:版本更新了,回退到破坏性迁移 --- 数据库数据被清空了第一步:尝试从版本1更新到版本2第二步:尝试重新打开数据库情景四:版本更新了,也提供了迁移策略 --- 数据健在第一步:尝试更新版本1到版本2第二

2020-05-24 16:43:14 9463 3

原创 koltin协程图片加载库Coil介绍

文章目录简单介绍使用1.简单使用2.基本变换3. Gif加载4. SVG加载5. 从Glide\Picasso迁移到Coil6. 个人的使用看法简单介绍github地址为:https://github.com/coil-kt/coil/  这应该是一个很新的一个图片加载库,完全使用kotlin编写,使用了kotlin的协程,图片网络请求方式默认为Okhttp,相比较于我们...

2020-03-14 20:25:26 8923 3

原创 2020年最值得期待的30个android库(截止2020年3月8日)

原文地址1.Coilgithub地址:https://github.com/coil-kt/coilkotlin编写使用协程编写的Android图片加载库。相比于Glide,Picasso,Fresco 它更快速、轻量、易上手、现代的Android加载库支持GiF和SVG,同时支持四种默认的图像变换: 模糊效果、圆形、灰阶、圆角等等基础代码为:imageView.load(“htt...

2020-03-08 18:31:09 5509 1

原创 解决七牛云获取gif缩列图背景为黑色问题

最近项目中使用七牛云存储gif图片,如下图:使用图片预览时,使用七牛图片格式转换,将gif转成jpg格式:发现背景为黑色,如果要使得背景变为白色:大致思路如下:将gif转成jpg格式:url -> http://www.demo.gifjpg_url -> http://www.demo.gif?imageView2/2/w/200/format/jpg将装...

2019-12-07 20:04:49 488

原创 Android基于云信实现微信斗图

总体概览最近项目出现了一个新的需求,需要实现类似微信的表情的斗图功能。由于我们是一家基于互联网+装修的公司,为了给业主创造一个好的印象和营造开工、完工的美好气象,这个需求我们还是默默的接了下来,虽然我们知道坑那是多得一比。下面我们就简单说明一下我们的方案。已经实现的功能大概是这样的:大致实现的功能如下:服务器动态配置斗图的类型和风格。因为每家公司的主题和风格样式都是不一样的,这里需要后...

2019-11-30 23:09:33 327 1

原创 C预处理器摘要

最近在学习C,记录一下C预处理器。C预处理器不是编译器的组成部分,但是它是编译过程中一个单独的步骤。简言之,C预处理器只不过是一个文本替换工具而已,他们会指示编译器在实际编译过程中所需的预处理。我们将C预处理器(C Preprocessor)简写为CPP。#define#define 定义宏定义#define PI 3.1415926#include#include 包含一个源...

2019-11-24 17:28:49 106

原创 解决Android云信突然不能发送图片,视频和语音异常问题 -- https惹的祸

去年写了一篇使用云信集成过程踩到的坑: 地址 集成上线之后,由于需要忙其他的项目,这个就扔给其他人了,直到最近有新的项目需要重新接入聊天组件,然后我们就aar集成了,过程什么的一切都很顺利,直到测试给了报出了异常:突然发现不能发送图片,视频,还有语音,最后发现只要是文件类型的Message都不能发送!第一反应就是是不是集成本身存在问题,是不是云信的sdk出了问题,是不是我的主module中有什...

2019-09-07 23:34:01 1106 3

原创 kotlin之协程(coroutines)学习(一)

两个月没写博客了,除了辞职找工作,就是熟悉新的环境,新的项目一直加班,累并快乐着,还是要好好加油啊。本文翻译来自kotlin官方文档https://kotlinlang.org/docs/reference/coroutines/coroutines-guide.htmlkotlin,最为一门编程语言,在它的标准类库中只提供了最低级别AP来支持其他类库使用协程。不像其它有类似协程能力编程语...

2019-08-29 14:28:54 547

原创 Android Jetpack系列 之 WorkManager

大概  这应该是一篇比较悲伤的文章,因为WorkManager并没有达到它所描述的功能,所以作为天朝的程序员,此处静默哀悼一秒钟,具体文章下面详述。 虽然如此,我们还是要了解一下这个WorkManager是干什么的,具体怎么干,又有什么优点或者缺点。关于WorkManager的官方文档可见:https://developer.android.com/topic/librar...

2019-05-22 15:04:21 1366

翻译 Android新控件MotionLayout介绍(四)

系列文章为:Android新控件MotionLayout介绍(一)Android新控件MotionLayout介绍(二)Android新控件MotionLayout介绍(三)本文标题:在MotionLayout中定义运动路径介绍在ConstraintLayout 2.0库中我们介绍了MotionLayout,这是一种主要是注重动画的布局。先前的文章中对它有了一些浏览,我非常鼓励你先把...

2019-05-20 11:16:36 3943 3

翻译 Android新控件MotionLayout介绍(三)

文章目录实例MotionLayout与CoordinatorLayoutMotionLayout 与DrawerLayoutMotionLayout 与ViewPagerMotionLayout与Lottie结论上两章内容:Android新控件MotionLayout介绍(一)Android新控件MotionLayout介绍(二)这一节主要讲述将MotionLayout与已经存在的Layo...

2019-05-17 10:40:09 1729

翻译 Android新控件MotionLayout介绍(二)

文章目录自定义属性ImageFilterView (1/2)ImageFilterView (2/2)关键帧Keyframe (1/2), 位置Keyframe (1/2), 属性结论有关 Android新控件MotionLayout介绍(一)。今天主要是来看第二章。主要是通过一系列包括自定义属性、图片操作和关键帧来描绘一下MotionLayout的特征。原文地址为:https://me...

2019-05-16 10:59:43 2546 1

翻译 Android新控件MotionLayout介绍(一)

文章目录初衷为什么需要MotionLayout?MotionLayout的限制什么时候使用MotionLayout将MotionLayout添加到项目中使用MotionLayoutConstraintSetsMotionScene示例一:引用已经存在的布局OnSwipe handler示例2: 独立的MotionScene插入属性ConstraintSetMotionLayout的属性结束?初衷...

2019-05-15 16:06:07 12553 6

原创 Android Room Database 学习

Room数据库学习初衷概览配置定义data类定义UserDao定义抽象数据库项目build 自动生成文件使用定义数据实体定义对象之间关系使用DAOS数据库更新初衷由于接手的项目中,看到别人使用的是Android Jetpack下的Android Room数据库,由于以前也只是接触过GreenDao和自己写的sqlite数据库,所以就学习了一下,做一个笔记记录一下。这是我以前学习的greenda...

2019-05-09 15:47:03 1676 1

Dagger2 demo

自己关于Dagger2的理解,还有一些常用Dagger2的注解。自己关于Dagger2的理解,还有一些常用Dagger2的注解。

2017-09-18

rxjava-joins包

rxjava的扩展包,其中包含一些rxjava核心包没有实现的操作符,比如and/then/when

2017-08-21

RecyclerView的ItemDecoration

自己理解的ItemDecoration

2017-06-24

SpannableStringDome

学习SpannableString&&SpannableStringBuilder的资料

2017-06-09

RxJava中create操作

RxJava中create操作的实验

2017-04-16

java数字转大写

自己帮忙写的一个数字转大写的工具类

2017-04-09

android客户端webview上传文件

自定义的webViewClient,解决了webview中file调起

2017-04-01

android步骤展示器源码

个人实现简单的写的android步骤显示器

2017-02-19

今日头条视频下载器_工具类

自己写的一个工具类,可以播放并下载今日头条的视频

2017-02-04

今日头条视频下载器

写的一个今日头条下载器

2017-02-03

android侧滑Demo

android侧滑Demo

2017-01-31

自定义柱状图

自己定义柱状图

2017-01-14

定义的ImageLoader

关于设计的imageLoader

2017-01-08

自定义开关View

自定义的开关View

2016-12-11

android富文本实例

基于android webvie的富文本

2016-07-31

my_logo_pic

my_logo_pic

2016-07-30

PreferenceActivity存储小dome

android老知识了,有个老项目回顾一个PreferenceActivity

2016-06-01

基于Facebook的Rebound的动画Dome

基于Facebook的Rebound的动画Dome

2016-05-22

HorizontalScrollView创建的Gallery

HorizontalScrollView创建的Gallery

2016-05-14

中文转拼音(pinyin4j-2.5.0.jar)

中文转汉语拼音,用于汉字的汉语拼音比较。

2015-05-15

java并发编程实战

详细介绍java并发编程,从简单到复杂,从认知到神会。学习java,成为java大神,你有必要看会

2014-09-19

空空如也

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

TA关注的人

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