自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

ting说你跳?

没有肉眼可见的天赋,希望每天有肉眼可见的进步。

原创 第一个AndroidStudio插件,一键创建Activity

前言 之前写过一个创建Activity的Gradle插件CreateActivityPlugin,但是使用起来并非像使用AndroidStudio自带的功能new Activity一样方便。 而且我也做了一些思考,觉得创建Activity这个过程,其实和Gradle没什么关系。Gradle主要做的...

2018-10-13 13:35:50

阅读数 1502

评论数 1

原创 RxJava2源码分析

本文基于RxJava2.2.1版本分析。 简介 官方介绍: RxJava is a Java VM implementation of Reactive Extensions: a library for composing asynchronous and event-based p...

2018-09-02 21:31:42

阅读数 218

评论数 1

原创 Glide源码分析

使用 官方给出的简单使用的例子: // For a simple view: @Override public void onCreate(Bundle savedInstanceState) { ... ImageView imageView = (ImageView) findVi...

2018-07-28 22:47:17

阅读数 128

评论数 0

原创 LeakCanary源码分析

概述 LeakCanary是用来检测 Java 和 Android 内存泄露的工具。 LeakCanary的原理非常简单。正常情况下一个Activity在onDestroy之后就要销毁,LeakCanary做的就是在一个Activity onDestroy之后将它放在一个WeakReferen...

2018-07-07 19:30:35

阅读数 130

评论数 0

原创 SparseArray原理分析

概述 Google推荐新的数据结构SparseArray。 SparseArray类上有一段注释: SparseArrays map integers to Objects. Unlike a normal array of Objects, there can be ga...

2018-06-24 21:18:02

阅读数 144

评论数 0

原创 vlayout原理分析

前言 当我们使用RecylerView时,需要绑定一个Adapter和LayoutManager,而vlayout里定义了VirtualLayoutAdapter(继承自Adapter)和VirtualLayoutManager(继承自LayoutManager)来绑定到RecyclerView...

2018-06-23 19:53:16

阅读数 547

评论数 0

原创 RecyclerView原理分析

前言 RecyclerView是谷歌官方出的一个用于大量数据展示的新控件,可以用来代替传统的ListView,更加强大和灵活。 支持RecyclerView高效运行的主要六大类: Adapter:为每一项Item创建视图 ViewHolder:承载Item视图的子布局 LayoutMana...

2018-06-23 14:40:25

阅读数 2100

评论数 1

原创 LiveData源码分析

前言 公司的项目使用的是MVVM设计模式,自然离不开LiveData,今天就来学习一波LiveData相关的源码。 如何感知生命周期 LiveData是在LifeCycle包下的,使用LiveData首先来了解一下LifeCycle是如何感知生命周期的。 下图Activity的继承体系...

2018-06-18 22:45:52

阅读数 875

评论数 0

原创 ARouter源码分析

原理 ARouter在编译期的时候,利用自定义注解完成了自动注册。 ARouter的编译 通过RouteProcessor。 process() process()方法相当于处理器的主函数main(),可以在这个方法中扫描、评估和处理注解的代码,以及生成Java文件。 publ...

2018-06-17 16:13:33

阅读数 344

评论数 0

原创 EventBus源码分析

前言 EventBus是一个处理事件的第三方框架,以发布和订阅的方式让使用者能够避免一些复杂的逻辑,轻松地在组件之间传递消息。 EventBus is a publish/subscribe event bus for Android and Java. 我是17年底才接触到它的...

2018-04-15 19:05:43

阅读数 197

评论数 0

原创 LayoutInflater源码分析

前言 最近又遇到RecyclerView的item最外层布局参数失效的问题,之前都没有去了解真正的原因,现在正好有空探寻一下这个问题,就从了解源码开始吧。 View的inflate() 平时我经常使用View.inflate(),它是View的一个静态方法,看到源码: public ...

2018-04-06 18:04:59

阅读数 204

评论数 0

原创 发布一个Gradle插件--实现一键创建Activity

定义Gradle插件的方式 有三种方式可以定义Gradle插件: 直接在build脚本中定义。 在已有的项目中新建一个module,目录必须是rootProjectDir/buildSrc/src/main/groovy。 在一个单独的项目中新建一个module,目录必须是rootProje...

2018-04-05 22:37:25

阅读数 1734

评论数 0

原创 初识Gradle

前言 Gradle是Android工程师的进阶必备,最近我也开始慢慢了解Gradle。 本文不会花太多的篇幅介绍Groovy语法,主要是介绍Gradle的基本概念,和一些常见的用法。 先给大家安利一下官方文档吧Gradle User Manual,如果英语不错的话我感觉看官方文档可能更好,因...

2018-04-05 20:28:07

阅读数 199

评论数 0

原创 DataBinding生成文件的时机

前言 上上周进行了DataBinding原理分析,但是并没有对DataBinding如何生成文件进行研究。 如何生成文件,当然也利用了apt(annotation-processing-tool),apt在很多三方框架中都有使用,例如:ButterKnife,Arouter,EventBus等...

2018-03-31 11:03:06

阅读数 808

评论数 1

原创 findViewById原理分析

最近有朋友出去面试,被问到findViewById的原理。 当然,我也不知道,现在就来学习一下。 查看源码,发现不管是activity.findViewById(id),还是view.findViewById(id)最后调用的都是View的findViewById(): @Nulla...

2018-03-30 12:42:57

阅读数 1077

评论数 0

原创 DataBinding原理分析

前言 现在公司用的框架是MVVM,用到MVVM肯定少不了databinding。 最近业务上遇到一个问题,需要动态生成一张图片,并将图片分享出去。我的思路就是写一个xml动态生成一个View,利用databinding绑定这个View,然后获取数据刷新对应的ViewModel,再将View转化...

2018-03-18 15:42:02

阅读数 791

评论数 1

原创 TintContextWrapper强转Activity失败原因深度探索

公司Android app遇到这个bug,遂开始一番探寻。 问题 先来看下错误日志: 2018-02-25 17:38:38 java.lang.ClassCastException: android.support.v7.widget.TintContextWrapper cann...

2018-02-26 23:22:54

阅读数 2063

评论数 2

原创 限制字数, 并且实时显示字数的EditText

最近换了新工作,有幸进入了一家C轮互联网公司,算是达到了职业规划的近期目标吧。比起之前的小公司确实各方面都正规完善了很多,就Android来说,工程中对很多组件都进行了自己的封装。前一阶段刚入公司,比较忙,现在已经缓和下来了,所以准备继续学习并写博客进行记录总结。回归正题,今天下午写了一个简单的自...

2017-12-16 17:32:01

阅读数 986

评论数 2

原创 ReentrantLock实现原理分析

类图ReentrantLock相关类图: AbstractOwnableSynchronizer类保持和获取独占线程。 AbstractQueuedSynchronizer,继承自AbstractOwnableSynchronizer,简称AQS,基于FIFO(First Input First ...

2017-10-30 16:52:57

阅读数 334

评论数 0

转载 Unsafe与CAS

Unsafe简单讲一下这个类。Java无法直接访问底层操作系统,而是通过本地(native)方法来访问。不过尽管如此,JVM还是开了一个后门,JDK中有一个类Unsafe,它提供了硬件级别的原子操作。这个类尽管里面的方法都是public的,但是并没有办法使用它们,JDK API文档也没有提供任何关...

2017-10-30 14:45:22

阅读数 138

评论数 0

原创 Android中的compileSdkVersion,minSdkVersion,targetSdkVersion和buildToolsVersion

引言使用Android Studio编写构建一个Android项目时,需要我们配置build.gradle文件,如下:…… android { compileSdkVersion 23 buildToolsVersion "23.0.3" defaultC...

2017-10-25 15:58:19

阅读数 420

评论数 0

原创 分析Android中的ANR

什么是ANRApplication Not Responding,意思就是程序未响应。如果一个应用无法响应用户的输入,系统就会弹出一个ANR对话框,如下图所示:用户可以自行选择继续等待,或者是停止当前程序。ANR产生的条件只有主线程才会产生ANR。在Activity中5s无响应,在Broadcas...

2017-10-25 09:07:16

阅读数 402

评论数 0

原创 Java集合之ConcurrentModificationException(并发修改异常)分析

前言今天写LeetCode遇到一道题,我想利用作为方法参数的一个集合作为返回的值,来达到节省空间的目的:public List<Interval> merge(List<Interval> intervals) {}意思就是,我想对集合intervals进行修改,然后返回值...

2017-10-24 15:27:13

阅读数 100

评论数 0

原创 Android屏幕适配总结

Px,DPI,DIP,Density,Sp等概念PxPixel,像素。不同设备显示效果相同,这里的“相同”是指像素数不会变,比如指定UI长度是100px,那不管分辨率是多少UI长度都是100px。也正是因为如此才造成了UI在小分辨率设备上被放大而失真,在大分辨率上被缩小。Screen Size表示...

2017-10-23 16:27:09

阅读数 97

评论数 0

原创 全面理解Android中的Px,DPI,DIP,Density,Sp等概念

PxPixel,像素。不同设备显示效果相同,这里的“相同”是指像素数不会变,比如指定UI长度是100px,那不管分辨率是多少UI长度都是100px。也正是因为如此才造成了UI在小分辨率设备上被放大而失真,在大分辨率上被缩小。Screen Size表示屏幕尺寸。一般所说的手机屏幕大小如1.6英寸、1...

2017-10-18 15:41:12

阅读数 181

评论数 0

原创 关于Bitmap的内存,加载和回收等

Bitmap加载图片Bitmap的加载离不开BitmapFactory类,关于Bitmap官方介绍: Creates Bitmap objects from various sources, including files, streams, and byte-arrays.BitmapFact...

2017-10-17 17:11:53

阅读数 3484

评论数 0

原创 Android四大组件之ContentProvider总结

ContentProviderContentProvider,顾名思义,内容提供者,为存储和获取数据提供统一的接口,可以在不同的应用程序之间共享数据。ContentProvider为应用间的数据交互提供了一个安全的环境。它准许你把自己的应用数据根据需求开放给其他应用进行增、删、改、查,而不用担心直...

2017-10-16 17:19:47

阅读数 134

评论数 0

原创 带你入门Android中的SQLite

SQLite的基本介绍SQLite是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持 Windows/Linux/Unix等等主流的操作系统,同时能够...

2017-10-14 20:46:43

阅读数 192

评论数 0

原创 Android JNI编程入门

JNI概述JNI的全称是Java Native Interface,它提供了若干的API实现了Java和其他语言的通信(主要是C&C++)。使用Java与本地已编译的代码交互,通常会丧失平台可移植性。但是,有些情况下这样做是可以接受的,甚至是必须的。例如: 使用一些旧的库 与硬件、操作系统...

2017-10-11 17:31:20

阅读数 156

评论数 0

原创 通过CMake在AndroidStudio项目中引入JNI编程

早期的Android工程(Eclipse时代)以及Gradle2.2之前,Android只能通过ndk-build命令结合.mk文件来编译本地库。从Gradle2.2开始,我们可以使用CMake方式来引入JNI编程,下面就开始介绍。下载NDK和构建工具一共有以下三种组件需要下载: NDK(The ...

2017-10-10 15:00:27

阅读数 349

评论数 0

原创 LeetCode:405. Convert a Number to Hexadecimal

DescriptionGiven an integer, write an algorithm to convert it to hexadecimal. For negative integer, two’s complement method is used.Note: All letters...

2017-10-10 10:05:32

阅读数 103

评论数 0

原创 Android UI 优化工具--Hierarchy Viewer

什么是HierarchyViewerHierarchy Viewer是随Android SDK发布的工具,位置在SDK目录下的tools文件夹下,名为**。它是Android自带的非常有用而且使用简单的工具,可以帮助我们更好地检视和设计用户界面(UI),绝对是UI检视的利器,下面来详细介绍如何在A...

2017-10-09 14:33:29

阅读数 175

评论数 0

原创 Android内存泄漏及分析

内存泄漏的定义大家都知道,Java是有垃圾回收机制的,这使得Java程序员比C++程序员轻松了许多,存储申请了,不用心心念念要加一句释放,Java虚拟机会派出一些回收线程兢兢业业不定时地回收那些不再被需要的内存空间(注意回收的不是对象本身,而是对象占据的内存空间)。什么叫不再被需要的内存空间Jav...

2017-09-28 14:18:03

阅读数 123

评论数 0

原创 LeetCode:438. Find All Anagrams in a String

最近又开始刷LeetCode了,很多之前做过的题目这次很快地做出来了。但是,今天遇到了Find All Anagrams in a String这题,又琢磨了好久,可能是没理解题目的精髓所在。my bad solution我的解特别low,使用HashMap,如下: public List&...

2017-09-28 11:02:08

阅读数 156

评论数 0

原创 Android动画总结

概述Android系统提供了很多丰富的API去实现UI的2D与3D动画,最主要的划分可以分为如下几类: View Animation: 视图动画在古老的Android版本系统中就已经提供了,只能被用来设置View的动画。 Drawable Animation: 这种动画(也叫Frame动画、帧动画...

2017-09-24 11:22:11

阅读数 121

评论数 0

原创 String,StringBuffer和StringBuilder

类的继承关系String、StringBuffer、StringBuilder 都实现了 CharSequence 接口。下面是类关系图:数据结构它们内部都是用一个char类型的数组实现,虽然它们都与字符串相关,但是其处理机制不同。1.String:是不可改变的量,创建后就不能再修改了。可以看到S...

2017-09-21 14:46:47

阅读数 172

评论数 0

原创 ViewPager中Fragment的生命周期

切换ViewPager时Fragment的生命周期变化这里有一个MainActivity,MainActivity中有一个ViewPager,使用的适配器是FragmentPagerAdapter,ViewPager中有三个Fragment:FirstFragment,SecondFragment...

2017-09-20 16:04:34

阅读数 259

评论数 0

原创 Fragment全面解析

生命周期图1:图2:Fragment必须是依存于Activity而存在的,因此Activity的生命周期会直接影响到Fragment的生命周期,并且Fragment的生命周期和Activity的生命周期很相似。onAttach()onAttach()将在Fragment与其Activity关联之后...

2017-09-19 14:56:26

阅读数 291

评论数 0

转载 Java transient关键字使用小记

哎,虽然自己最熟的是Java,但很多Java基础知识都不知道,比如transient关键字以前都没用到过,所以不知道它的作用是什么,今天做笔试题时发现有一题是关于这个的,于是花个时间整理下transient关键字的使用,涨下姿势~~~好了,废话不多说,下面开始:transient的作用及使用方法我...

2017-09-17 19:03:09

阅读数 173

评论数 0

原创 Java修饰符

Java语言提供了很多修饰符,主要分为以下两类: 访问修饰符 非访问修饰符 修饰符用来定义类、方法或者变量,通常放在语句的最前端。访问修饰符类 名称 说明 备注 public 可以被所有类访问(使用) public类必须定义在和类名同名的文件中 无访问修饰符(默认) ...

2017-09-17 15:01:25

阅读数 172

评论数 0

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