自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

蜗牛快跑

you still have lots more to work on.

原创 Android开发的实用冷知识

TextUtils join(CharSequence delimiter, Object[]/Iterable) 可以把数组或集合根据指定的格式转换成字符串,比如逗号。 @Test public void joinTest() throws ...

2018-08-07 17:14:14

阅读数 862

评论数 0

原创 Gradle 自定义Plugin插件之发送钉钉通知

在之前的文章中,我们介绍了怎么使用Gradle插件,apk加固,上传到蒲公英。 这篇文章,主要就是把流程进一步完善,通过Gradle插件实现:打包—加固—上传蒲公英—发送钉钉消息,实现完全自动化.。 之前的文章介绍: Gradle 自定义Plugin插件介绍 Gradle 自定义Plugin插件之...

2020-01-03 12:59:33

阅读数 300

评论数 0

原创 Gradle 自定义Plugin插件之360加固

之前发布的文章:Gradle 自定义Plugin插件之上传APK到蒲公英。让我们知道了自定义插件的一些功能。 一般来说,在发布的时候,我们的APK都需要加固的,毕竟安全点。这里,我们就结合之前的插件,再定义一个加固APK的任务。然后,让我们自动化的步伐可以更大一点。打包–→加固–→上传蒲公英。 既...

2020-01-02 11:56:45

阅读数 367

评论数 0

原创 Gradle 自定义Plugin插件之上传APK到蒲公英

在之前的文章:Gradle 自定义Plugin插件介绍 中,介绍了通过Gradle自定义插件的几种方式。 作为一个的Coder,我们当然不希望我们自定义插件只是简单的打印log啦。比如,之前我们版本开发完成的时候,每次测试的流程都需要手动的打包,加固,上传,钉钉通知等等 。 现在,我们就通过自定义...

2020-01-01 17:59:44

阅读数 385

评论数 1

原创 Android Studio: 通过Artifactory搭建本地仓库优化编译速度

Android Studio 编译速度慢,一般来说,原因有下面几个。 Gradle下载慢 依赖库下载慢 依赖库使用"+"(使用最新的),每次都需要去查找新的(尽量不适用这种方式) 这里,大部分的库,我们可以通过阿里云代理仓库。 但是,如果有我们自己的私有库或者插件的话。肯定...

2019-12-27 21:01:07

阅读数 457

评论数 0

原创 Gradle 自定义Plugin插件介绍

Android studio通过Gradle来构建我们的项目。一般情况下,我们只是使用Gradle来配置一些功能,比如,buildTypes,productFlavors等等。 实际上,Gradle提供了很多有用的功能,可以让我们更加方便的管理我们的项目。 这篇,我们介绍下Gradle的Plugi...

2019-12-25 19:52:29

阅读数 433

评论数 0

原创 Android 架构:使用枚举重新设计缓存目录的构建

首先声明,这篇文章不是讲getCacheDir()、getFilesDir()、getExternalFilesDir()、getExternalCacheDir()等等文件目录的存放位置,及使用方法的。 本文章,主要是想说下通过枚举来管理缓存目录(就是上面那么目录),是否比我们常用的常量管理缓存...

2019-12-17 23:57:40

阅读数 357

评论数 0

原创 Android 架构:设计单例,使单例对象面向接口编程

我们都知道面向接口编程的优点: 提高编程的灵活性 模块解耦,降低维护成本。 但是,对于平时我们使用的单例来说,我们是无法做到上面的事情的。如果,我们想让单例对象也做到这样的面向对象编程的话。我们就需要其他的地方来保证对象的唯一性,不能通过传统的方式,在对象内部保证对象的唯一性。 普通单例 设...

2019-12-16 23:39:58

阅读数 321

评论数 0

原创 Android 自定义控件:加载长图View(局部加载)

当我们在需要加载大图,长图的时候。如果,我们把整张图片都加载进去的话,很可能会OOM。 因为,我们的手机屏幕是有限的。所以,我们可以只加载显示的部分就可以了,这样就需要用到局部加载。 需求分析: Rect。我们既然想要局部加载,肯定是需要一个Rect的绘制矩形的。 GestureDetecto...

2019-12-01 00:53:43

阅读数 386

评论数 0

原创 Android ConstraintLayout 约束布局的使用介绍

相对定位 Margins 居中定位与偏移 圆形定位 尺寸约束 链(Chains) 虚拟辅助对象 Barrier Group Guideline Placeholder 优化 none standard direct barrier chain dimensions 相对定位 相对定位...

2019-11-13 16:01:29

阅读数 426

评论数 0

原创 Dart之基础知识学习

Flutter基础知识: Dart之方法 方法的定义 可选参数 默认参数值 方法对象 匿名方法 闭包 Dart之类对象的基础特性 类 属性 构造方法 对象的操作 Dart之类对象的高级特性 类的继承 抽象类 接口 Mixins 操作符的覆写 Flutter之方法 1,方法的定...

2019-11-03 17:49:07

阅读数 263

评论数 2

原创 Android Jenkins自动化构建之参数化构建、多分支构建(二)

上篇,Android之Jenkins自动化打包流程及问题处理(一) 完成Jenkins最基本的自动化国建过程。 但是,我们正式的项目往往需要配置很多的参数,设置等等。所以,最进本的打包,是无法满足我们的要求的。 这篇文章,就说明下,自动化打包的其他配置,参数化构建,多分支构建等等。 本文内容: ...

2019-10-25 23:05:11

阅读数 228

评论数 0

原创 Android之Jenkins自动化打包流程及问题处理(一)

问题 Aapt2Exception AAPT2 error 本地打包没有出现这个问题。只在Jenkins上才报了这个错误。 解决办法: 在相应的项目配置–构建–高级下面,勾选 Force GRADLE_USER_HOME to use workspace 如下图 ...

2019-10-25 18:43:21

阅读数 223

评论数 0

原创 Android 性能优化之UI布局优化

前言 Android系统每隔16ms发出VSYNC(Vertical Synchronization(垂直同步))信号,触发对UI进行渲染,也就是我们的应用必须在16ms内完成屏幕刷新的全部逻辑。 为什么是16ms呢,这是因为一般来说人眼分辨的最大帧数是每秒60帧。一帧看做一张图片的话,可以算出1...

2019-10-15 16:48:47

阅读数 231

评论数 0

原创 Android 性能优化之网络优化

网络优化,对APP来说,网络优化是很重要的一个优化手段。它直接影响用户体验。比如,手机都有APP的流量消耗排行,再或者用户进入后,一直在Loading。长时间的等待,让用户会认为你的APP反应慢,体验很差。 下面,就聊下一般都有哪些网络优化的手段及 检查网络流量 网络优化的手段 1,网络连接的优化...

2019-10-14 18:59:33

阅读数 232

评论数 0

原创 源码分析:Android Okhttp源码浅析(二)

承接的Okhttp的框架分析。 “源码分析:Android Okhttp源码浅析(一)” 我们知道了,拦截器都是链式调用的。 当有请求发送时,每个拦截器都会处理请求;然后,扔给下一个拦截器来处理,直到返回结果; 然后,把结果,再一次的扔到上一个的拦截器来处理结果。最后把Response处理完成的R...

2019-09-16 13:24:12

阅读数 219

评论数 0

原创 Gradle:Android打包动态传参及多productFlavors配置

Android通过Gradle命名动态传参打包 Android通过gradle的productFlavors多个维度切换项目环境 Android通过Gradle命名动态传参打包 Android开发中,我们常常需要给测试,或者其他人提供APP的安装包。这些安装包跟生产包,多多少少会有差异。一些简...

2019-08-12 18:34:54

阅读数 386

评论数 0

原创 Android项目集成kotlin,导致项目无法运行(出现一个红叉)解决办法

问题:Error:Please select Android SDK 近期,项目不太忙,打算引出google推了几年的Kotlin。毕竟,Kotlin是Google推荐的Android开发首选语言,也推了好几年了。然后,就手动加入各种配置,提交到了git上。结果,有的同学更新后,编译通过了,就是在...

2019-06-27 16:55:08

阅读数 685

评论数 0

原创 idea 高级调试技巧

idea的调试技巧,包含临时断点 条件断点(循环中使用,特别棒),强制返回(在任意位置返回),返回上一步(已经修改的状态,不能恢复),查看或修改变量的值,让调试按照我们的方向走;还有多线程调试,按照我们的意愿的顺序来执行;还有强制抛出异常,远程调试等等。

2019-06-13 16:00:28

阅读数 503

评论数 0

原创 Android通过位运算对多状态进行操作

提到位运算,我们都知道是**按位与(&)、按位或(|)、按位异或(^)、取反(~)**。并且,我们也知道每个运算符的作用,并且位运算的效率是很高的。但是,你在项目中用到过的有多少呢?(当然,可读性跟提升的这点效率之间还需要平衡。)。笔者对位运算也仅仅是知道一点,这也导致了,在处理问题的时候...

2019-05-21 14:09:27

阅读数 406

评论数 0

原创 源码分析:HashMap浅析

HashMap作为最基础的存放集合。在Java中不同于List存放单个元素,它是以key-value的形式来存放数据的,在项目中有着广泛的应用。我们一起来看看,它是怎么实现的呢。 常用的Map操作有: Map<Object,Object> map = new HashMap(); m...

2019-05-13 16:17:55

阅读数 240

评论数 0

原创 源码分析:LinkedList浅析

LinkedList是一个基于双向链表实现的集合。上篇我们分析了ArrayList集合,现在,我们来分析下LinkedList又是怎么实现的,它跟ArrayList有哪些差别呢。 先看下构造器 public LinkedList() { } public LinkedList(...

2019-05-13 16:05:26

阅读数 237

评论数 0

原创 源码分析:ArrayList浅析

作为我们平时开发用的最多的一个基础的集合;并且面试时候,经常用它与LinkedList来比较异同。我们有必要了解下它内部的一些东西。 它的内部并不复杂,我们就按照,我们的使用习惯来一个个的看。 ArrayList<String> arrayList= new ArrayList();...

2019-05-13 15:57:55

阅读数 252

评论数 0

原创 源码分析:Activity加载并显示View的流程分析(二)

上一篇,源码分析:Activity加载并显示View的流程分析(一),分析了Activity的setContentView()方法是怎么一步步把xml的layoutId资源文件解析并放到DecorView里面的。 这一篇,我们就分析下,这个DecorView的测量,绘制并显示出来的过程。 之前分析...

2019-01-22 15:25:27

阅读数 299

评论数 0

原创 源码分析:Activity加载并显示View的流程分析(一)

我们在用Activity的时候,一般都是在onCreate()方法中设置setContentView()方法。然后,进去Activity的话,页面就加载出来了。这里就分析下,他是怎么一步步的显示出来的。 我们先分析下Activity::setContentView(layoutId)之后,都做了什...

2019-01-22 15:15:38

阅读数 360

评论数 0

原创 源码分析:Activity生命周期调用顺序(二)

Activity生命周期调用顺序,接着上篇 源码分析:Activity声明周期调用顺序(一) 当进入一个Activity后,会执行attach()→onCreate()→onStart()→onRestoreInstanceState()→onPostCreate()→onResume()→onP...

2019-01-15 10:47:05

阅读数 395

评论数 0

原创 源码分析:Activity生命周期调用顺序(一)

我们一般打开一个新的Activity,都会调用**startActivity(Intent)**。 新的Activity的生命周期就开始被调用了。 下面,我们就从**Activity.startActivity**开始,看下源码是怎么一步步的调用新启动的Activity的声明周期的。 先放一个...

2019-01-15 10:02:03

阅读数 558

评论数 1

原创 源码分析:EventBus3.0.0源码解析

基本的使用 //伪代码 public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(s...

2019-01-07 16:35:48

阅读数 275

评论数 0

原创 Retrofit2 源码分析

Retrofit介绍 Retrofit是Square公司的一个开源网络访问框架。主要是把网络请求的数据,通过接口来封装。内部通过OKHttpClient来请求。 Retrofit的简单配置,使用 Retrofit retrofit = new Retrofit ...

2018-08-04 14:55:03

阅读数 336

评论数 0

原创 Android NDK学习:JNI中的数组、引用和异常的处理

JNI的文档 https://docs.oracle.com/javase/6/docs/technotes/guides/jni/spec/jniTOC.html JNI数组操作 调用数组 Java 方法 //给数组排序 public native void...

2018-04-12 12:51:00

阅读数 325

评论数 0

原创 Android NDK学习:native 通过JNI调用java的属性跟方法

native调用Java的普通属性 Java 代码 public class JniUtils { static{ System.loadLibrary("JNIEnvOne"); } public String name =...

2018-04-11 20:34:26

阅读数 571

评论数 0

原创 源码分析:Android Okhttp源码浅析(一)

Okhttp的调用 分析源码,我们都需要通过调用来查看源码的每一步都做了什么事情。 看下异步调用 OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder()....

2018-04-03 19:21:48

阅读数 360

评论数 0

原创 源码分析:Android 的onTouch事件传递机制分析

当用户触摸屏幕的时候,最先接受到触摸事件的是Activity的dispatchTouchEvent(). 我们就从这里开始分析事件的分发 Activity源码 看下Activity的dispatchTouchEvent()源码。 public boolean dispa...

2018-04-01 18:27:25

阅读数 403

评论数 0

原创 源码分析:Handler、Looper、Message、MessageQueue之间的关系

Handler是平时用的最多的线程通信机制,都知道一些原理。但是,对于一些细节还是有些不太清楚,下面就带着下面的那些问题来重新熟悉下源码。 Handler是怎么保证线程间的通信的? Looper的死循环,是怎么保证的线程不卡顿的 Message的消息复用是怎么做的? 先看下怎么使用...

2018-03-30 23:26:10

阅读数 291

评论数 0

原创 使用注解处理器(Annotation Processor)像butterKnife一样,实现简单的控件初始化

现在很多Android的库都是采用注解的方式,来完成某些功能。仿照butterKnife通过Annotation Processor 实现控件绑,使用注解来完成一个简单的控件初始化。完成这个功能我们就需要知道一个东西,注解处理器。 注解处理器是一个在javac中的,用来编译时扫描和处理的注解的工具...

2018-01-27 15:54:03

阅读数 832

评论数 0

原创 Kotlin初探:Kotlin的集合操作符

Android。Kotlin区分了可变集合和不可变集合(lists, sets, maps等)。下面是对kotlin里面集合操作符的说明以及怎么查看kotlin转换成java代码。集合有:Iterable,Collection,MutableIterable,List,MutableList,Se...

2017-11-10 12:40:03

阅读数 2933

评论数 0

原创 Android:一个设备安装多个包(生产包,测试包等)

Android一个设备安装多个环境的包(测试,正式等)。Gradle添加applicationIdSuffix,清单文件ContentProvider下authority要唯一,ContentProvider中authority要与清单文件声明的一致,FileProvider的处理。UriMatc...

2017-10-25 19:32:54

阅读数 1356

评论数 0

翻译 准备你的应用(Android免安装应用)

最好的免安装应用体验专注于帮助用户快速完成任务(例如观看视频或进行购买).您可以开始使用此应用程序列表来准备Android免安装应用。这里的许多考虑被认为是Android应用程序的最佳做法.从你的应用里删除无用的体积去除所有的未知或未使用的权限,未使用的组件,不必要的第三方依赖关系和库。删除这些i...

2017-08-29 14:32:16

阅读数 1845

评论数 0

原创 Android 控件之FlexboxLayout知识梳理

FlexboxLayout 是google出品的Android控件,类似前端或RN的flex布局。FlexboxLayout 分为主轴和侧轴(垂直于主轴)。flexDirection属性(row,row_reverse,column,column_reverse)决定的。 FlexboxLayou...

2017-08-24 14:48:44

阅读数 444

评论数 0

翻译 硬件加速

Android 3.0(API 11)开始,Android 2D 渲染通道支持硬件加速,这意味着在View的canvas上的执行的所有绘制操作都使用GPU。由于启用硬件加速所需的资源增加,你的应用程序将消耗更多的RAM。 如果您的Target API 级别 >=14,则默认情况下会启用硬件加...

2017-08-08 10:42:36

阅读数 733

评论数 0

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