自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(116)
  • 收藏
  • 关注

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

前言之前写过一个创建Activity的Gradle插件CreateActivityPlugin,但是使用起来并非像使用AndroidStudio自带的功能new Activity一样方便。而且我也做了一些思考,觉得创建Activity这个过程,其实和Gradle没什么关系。Gradle主要做的应该是帮助我们构建编译项目,而我们创建Activity仅仅是创建修改文件罢了。正好最近公司Andro...

2018-10-13 13:35:50 3141 1

原创 RxJava2源码分析

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

2018-09-02 21:31:42 442 1

原创 Glide源码分析

使用官方给出的简单使用的例子:// For a simple view:@Override public void onCreate(Bundle savedInstanceState) { ... ImageView imageView = (ImageView) findViewById(R.id.my_image_view); GlideApp.with(this)....

2018-07-28 22:47:17 347

原创 LeakCanary源码分析

概述LeakCanary是用来检测 Java 和 Android 内存泄露的工具。LeakCanary的原理非常简单。正常情况下一个Activity在onDestroy之后就要销毁,LeakCanary做的就是在一个Activity onDestroy之后将它放在一个WeakReference中,然后将这个WeakReference关联到一个ReferenceQueue,查看Referen...

2018-07-07 19:30:35 313

原创 SparseArray原理分析

概述Google推荐新的数据结构SparseArray。SparseArray类上有一段注释: SparseArrays map integers to Objects. Unlike a normal array of Objects, there can be gaps in the indices. It is intended to be more memor...

2018-06-24 21:18:02 343

原创 vlayout原理分析

前言当我们使用RecylerView时,需要绑定一个Adapter和LayoutManager,而vlayout里定义了VirtualLayoutAdapter(继承自Adapter)和VirtualLayoutManager(继承自LayoutManager)来绑定到RecyclerView。VirtualLayoutAdapter它是一个抽象类,很简单:public abstr...

2018-06-23 19:53:16 1033

原创 RecyclerView原理分析

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

2018-06-23 14:40:25 4844 1

原创 LiveData源码分析

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

2018-06-18 22:45:52 1454

原创 ARouter源码分析

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

2018-06-17 16:13:33 782

原创 EventBus源码分析

前言EventBus是一个处理事件的第三方框架,以发布和订阅的方式让使用者能够避免一些复杂的逻辑,轻松地在组件之间传递消息。 EventBus is a publish/subscribe event bus for Android and Java.我是17年底才接触到它的,所以这里就分析一下最新EventBus3.0的源码。至于如何使用EventBus,请进入github...

2018-04-15 19:05:43 364

原创 LayoutInflater源码分析

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

2018-04-06 18:04:59 322

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

定义Gradle插件的方式有三种方式可以定义Gradle插件:直接在build脚本中定义。在已有的项目中新建一个module,目录必须是rootProjectDir/buildSrc/src/main/groovy。在一个单独的项目中新建一个module,目录必须是rootProjectDir/自定义/src/main/groovy。前两种比较局限,只能在本项目中使用,第三种方...

2018-04-05 22:37:25 2519

原创 初识Gradle

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

2018-04-05 20:28:07 446

原创 DataBinding生成文件的时机

前言上上周进行了DataBinding原理分析,但是并没有对DataBinding如何生成文件进行研究。如何生成文件,当然也利用了apt(annotation-processing-tool),apt在很多三方框架中都有使用,例如:ButterKnife,Arouter,EventBus等等。这里就不介绍了,推荐一个github上的demo–DemoAbstractProcessor。...

2018-03-31 11:03:06 1434 1

原创 findViewById原理分析

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

2018-03-30 12:42:57 2670

原创 DataBinding原理分析

前言现在公司用的框架是MVVM,用到MVVM肯定少不了databinding。最近业务上遇到一个问题,需要动态生成一张图片,并将图片分享出去。我的思路就是写一个xml动态生成一个View,利用databinding绑定这个View,然后获取数据刷新对应的ViewModel,再将View转化成Bitmap分享出去。结果发现,数据并没有填充到View上。这是为什么呢?当时的猜想,可能是因为...

2018-03-18 15:42:02 2352 1

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

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

2018-02-26 23:22:54 3427 2

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

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

2017-12-16 17:32:01 1811 2

原创 ReentrantLock实现原理分析

类图ReentrantLock相关类图:AbstractOwnableSynchronizer类保持和获取独占线程。AbstractQueuedSynchronizer,继承自AbstractOwnableSynchronizer,简称AQS,基于FIFO(First Input First Output)队列的实现。以虚拟队列的方式管理线程的锁获取与锁释放,以及各种情况下的线程中断。提供了默认

2017-10-30 16:52:57 789

转载 Unsafe与CAS

Unsafe简单讲一下这个类。Java无法直接访问底层操作系统,而是通过本地(native)方法来访问。不过尽管如此,JVM还是开了一个后门,JDK中有一个类Unsafe,它提供了硬件级别的原子操作。这个类尽管里面的方法都是public的,但是并没有办法使用它们,JDK API文档也没有提供任何关于这个类的方法的解释。总而言之,对于Unsafe类的使用都是受限制的,只有授信的代码才能获得该类的实例,

2017-10-30 14:45:22 400

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

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

2017-10-25 15:58:19 1012

原创 分析Android中的ANR

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

2017-10-25 09:07:16 748

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

前言今天写LeetCode遇到一道题,我想利用作为方法参数的一个集合作为返回的值,来达到节省空间的目的:public List<Interval> merge(List<Interval> intervals) {}意思就是,我想对集合intervals进行修改,然后返回值就传修改后的intervals。然后顺势就联想到了并发修改异常,之前只是知道个概念,并没有仔细思考过。今天就来分析一下Concu

2017-10-24 15:27:13 454

原创 Android屏幕适配总结

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

2017-10-23 16:27:09 352

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

PxPixel,像素。不同设备显示效果相同,这里的“相同”是指像素数不会变,比如指定UI长度是100px,那不管分辨率是多少UI长度都是100px。也正是因为如此才造成了UI在小分辨率设备上被放大而失真,在大分辨率上被缩小。Screen Size表示屏幕尺寸。一般所说的手机屏幕大小如1.6英寸、1.9英寸、2.2英寸,都是指的对角线的长度,而不是手机面积。我们可以根据勾股定理获取手机的宽和长,当然还

2017-10-18 15:41:12 479

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

Bitmap加载图片Bitmap的加载离不开BitmapFactory类,关于Bitmap官方介绍: Creates Bitmap objects from various sources, including files, streams, and byte-arrays.BitmapFactory类提供了四类方法用来加载Bitmap:decodeFile(),从文件系统加载。decodeR

2017-10-17 17:11:53 5480

原创 Android四大组件之ContentProvider总结

ContentProviderContentProvider,顾名思义,内容提供者,为存储和获取数据提供统一的接口,可以在不同的应用程序之间共享数据。ContentProvider为应用间的数据交互提供了一个安全的环境。它准许你把自己的应用数据根据需求开放给其他应用进行增、删、改、查,而不用担心直接开放数据库权限而带来的安全问题。ContentProvider提供了对底层数据存储方式的抽象,如下图中

2017-10-16 17:19:47 281

原创 带你入门Android中的SQLite

SQLite的基本介绍SQLite是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持 Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如Tcl、PHP、Java、C++、.Net等,还有ODBC接口。特点:轻量级

2017-10-14 20:46:43 312

原创 Android JNI编程入门

JNI概述JNI的全称是Java Native Interface,它提供了若干的API实现了Java和其他语言的通信(主要是C&C++)。使用Java与本地已编译的代码交互,通常会丧失平台可移植性。但是,有些情况下这样做是可以接受的,甚至是必须的。例如:使用一些旧的库与硬件、操作系统进行交互提高程序的性能提高应用的安全性。那么怎么使用JNI呢,一般情况下我们首先是将写好的C/C++代码编

2017-10-11 17:31:20 363

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

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

2017-10-10 15:00:27 1239

原创 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 in hexadecimal (a-f) must be in lowercase.The hexa

2017-10-10 10:05:32 228

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

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

2017-10-09 14:33:29 515

原创 Android内存泄漏及分析

内存泄漏的定义大家都知道,Java是有垃圾回收机制的,这使得Java程序员比C++程序员轻松了许多,存储申请了,不用心心念念要加一句释放,Java虚拟机会派出一些回收线程兢兢业业不定时地回收那些不再被需要的内存空间(注意回收的不是对象本身,而是对象占据的内存空间)。什么叫不再被需要的内存空间Java没有指针,全凭引用来和对象进行关联,通过引用来操作对象。如果一个对象没有与任何引用关联,那么这个对象也

2017-09-28 14:18:03 295

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

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

2017-09-28 11:02:08 376

原创 Android动画总结

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

2017-09-24 11:22:11 249

原创 String,StringBuffer和StringBuilder

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

2017-09-21 14:46:47 296

原创 ViewPager中Fragment的生命周期

切换ViewPager时Fragment的生命周期变化这里有一个MainActivity,MainActivity中有一个ViewPager,使用的适配器是FragmentPagerAdapter,ViewPager中有三个Fragment:FirstFragment,SecondFragment,ThirdFragment。刚进入MainActivity,Log是这样的:可以看到,MainActi

2017-09-20 16:04:34 1222

转载 Java transient关键字使用小记

哎,虽然自己最熟的是Java,但很多Java基础知识都不知道,比如transient关键字以前都没用到过,所以不知道它的作用是什么,今天做笔试题时发现有一题是关于这个的,于是花个时间整理下transient关键字的使用,涨下姿势~~~好了,废话不多说,下面开始:transient的作用及使用方法我们都知道一个对象只要实现了Serilizable接口,这个对象就可以被序列化,java的这种序列化模式为

2017-09-17 19:03:09 261

原创 Java修饰符

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

2017-09-17 15:01:25 272

原创 Android系统启动的过程

关于Android系统启动的过程,以前一直觉得离自己很遥远。随着不断深入的学习,是时候要了解一下。这里就综合网上的很多资料来分析一下Android系统启动的过程。图示首先贴上两张图,展示Android系统启动的过程。图一:图二:通过以上两张图,我们能清晰地了解Android系统启动的过程。下面就开始切入正题。Android系统启动的过程第一阶段:Android设备上电后,首先会从处理器片上ROM的启

2017-09-16 21:44:20 296

空空如也

空空如也

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

TA关注的人

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