- 博客(45)
- 资源 (3)
- 收藏
- 关注
原创 CoorinatorLayout协调者布局
CoorinatorLayout是官方号称的一种功能十分强大的FrameLayout(注意最新的实现是ViewGroup),主要有以下的两种基本应用场景: 1. 作为应用的顶层装饰布局; 2. 作为协调有交互依赖的子View的容器。用法CoorinatorLayout已流行了好一段时间,抽屉型Toolbar布局则是很经典的样例,推荐Mastering the ...
2018-05-02 12:08:49
2399
原创 Android KTX与Kotlin Android Extensions
Android KTX Android KTX是Google官方推荐的一套便利的Android API扩展函数库。因还处于beta阶段,相关API并不丰富,但既然是出自JakeWharton大神之手,必然是前途无限的。其目前提供了如下的API:Kotlin 扩展特性Android KTX能扩充Android API得益于Kotlin扩展函数的特性,即能在不改变现有类...
2018-03-23 20:17:21
992
原创 Javassist基础与实践
概述对于Javassist可理解成在java语言层面上直接操纵java字节码的一种工具。经典应用场景是在构建java代码阶段直接修改字节码,如代码插桩。特点:更改原有class:增、删和修改class中的字段或方法;修改类的继承结构新增class:增加字段、方法、构造方法;注意不能新增接口。新增接口:只适用于接口新增注解:用于创建注解核心基础CtClass:Javassist并不是直接操
2017-11-02 11:18:12
2323
原创 Gradle Transform
概述Gradle Transform是Android官方提供给开发者在项目构建阶段即由class到dex转换期间修改class文件的一套api。目前比较经典的应用是字节码插桩、代码注入技术。基础TransformInput:所谓Transform就是对输入的class文件转变成目标字节码文件,TransformInput就是这些输入文件的抽象。目前它包括两部分:DirectoryInput集合与J
2017-09-25 10:48:43
10150
5
原创 Android Studio插件开发基础
概述目前IntelliJ IDEA作为一款极其出色的IDE,它可借助于各种灵活的插件来实现强大的功能。虽然Android Studio是基于IDEA,但不能直接在Android Studio中进行插件的开发,幸运的是IDEA的插件是可以兼容Android Studio的。核心基础开发语言:插件的开发语言是java,而插件本质上是一个jar包,从远程服务器下载或本地磁盘被安装到IDEA
2017-09-21 18:45:52
744
原创 Gradle之多项目与混合构建
Multi-project builds随着大型的单项目构建发展所面临的各种挑战,多项目构建应运而生。多项目构建的结构如下:包括一个root顶层项目(包括build和setting脚本),之下再包含一个或多个子项目(包含build脚本):root-project├── build.gradle├── gradle│ └── wrapper│ ├── gradle-wrap
2017-09-15 15:17:18
3106
原创 Gradle基础
Gradle概述Gradle作为一种项目构建的工具,其最大优势是借助于插件可以灵活地实现功能十分复杂、用途极其广泛的项目构建。Groovy与Gradle DSLGroovy作为在java之上设计的脚本语言,相比java,它的代码会更加的简洁优雅(比如方法定义十分简洁,方法的调用可省略圆括号等)这种语言特性使得Groovy特别适合用于设计DSL。DSL:领域专用语言,简单理解就是一种只能在某种具体
2017-09-11 17:39:23
799
1
原创 自定义Gradle插件
Gradle插件Gradle插件好处:在Gradle构建过程中涉及到的通用逻辑,如果将其封装成插件,就可在多个工程项目构建中复用。Gradle插件开发语言:Groovy、Java与Scala。不管使用哪种语言,最终都是以字节码的方式被引入Gradle。Gradle插件开发方式Build script:直接在Gradle文件中开发,好处是流程相对简单,因为Gradle会自动编译并引入,坏处是这
2017-08-24 20:19:40
1738
原创 Groovy语法之闭包
闭包概述闭包就是一个特殊的代码块闭包格式闭包的格式定义如下:{ [closureParameters -> ] statements }示例:{ item++ } { -> item++ } { printl
2017-08-23 19:44:38
1282
原创 Groovy语法之类
groovy与java的类的区别groovy与java的类大同小异,从分类来看:分为普通类、匿名类、抽象类、接口、匿名内部类;从自定义来看:标识符class、访问限定符(public、protected 、private、static),属性与方法的定义等都非常类似。访问权限的区别:groovy的class将java中默认访问权限与public等效,即没有指定访问限定符都被当成public
2017-08-21 15:36:25
1291
原创 Groovy语法之操作符
1. Groovy的算术运算操作相比Java多了对幂运算的支持,用法如下:相比Java,Groovy支持**安全运算符**(?.),可有效避免空指针异常。2. Groovy支持**方法指针操作符**(.&),原理是通过变量来存放某个方法的指针,即可使用这个变量来调用这个方法。3. 相比java,groovy提供**模式运算符**(~)可方便创建java.util.regex.Pattern的示例。... ...
2017-08-17 14:44:25
1979
原创 Groovy语法基础
Groovy与JavaGroovy是一种与Java非常相似的脚本语言,该脚本语言会被编译成class字节码文件,最终运行于Java虚拟机上。环境配置前提是配置好JDKGroovy环境在类Unix上配置,只需以下的几行命令即可:第一步下载sdkman,这是管理sdk的工具,命令如下:curl -s get.sdkman.io | bash 读取并执行sdkman的初始化脚
2017-08-09 16:09:24
1474
原创 Android Fabric工作原理
Fabric简介Fabric是国外流行的log收集与分析工具,图表数据非常直观,关于其配置详情请看官网。这里主要是分析,Fabric是如何做到上报log的。注意这里涉及的Fabric版本是1.3.10,注意虽然源码是一直在变化,但原理是万变不离其宗的。工作原理Java异常处理流程可以简单总结成如下两种情况: (1) 未添加异常处理:throw exceptoon –> DefaultUncau
2017-08-09 10:20:32
4570
原创 Realm源码分析之copyToRealm与copyToRealmOrUpdate
1. **copyToRealm与copyToRealmOrUpdate:前者是给未指明主键的model使用的,后者则是给指明主键的model使用。** 2. **copyToRealm对应无主键参数的createObject,区别是copyToRealm会复用Realm缓存的model示例,不会每次都创建新的model实例。** 3. **copyToRealmOrUpdate对应有主键参数的create
2017-07-28 16:14:44
3501
原创 Realm源码分析之Writes
上篇是Realm源码分析的开篇,是关于Realm数据库的初始化,关键一点是要抓住RealmProxyMediator这个代理中介者的实例化过程。在理解了Realm初始化之后,接下来就可以追踪Realm数据库读写等操作的源码了。因篇幅限制,先分析Writes。
2017-07-26 15:50:14
1612
原创 Realm源码分析之初始化
Realm源码下载上篇Realm总结是关于Realm的基础使用,可粗略地概括为如下关系图: 在感受了Realm的强大之后,更让人对其背后的实现原理感到好奇,点击下载Realm源码一探究竟吧。目前Realm java的版本是3.5,如下工程截图,模块简介如下: realm-java工程囊括了好几个模块,而编译配置说明是在工程根目录下的README.mdexamples模块是
2017-07-21 22:41:21
2713
原创 Realm基础
Realm使用在工程根目录下的build.gradle添加如下配置:buildscript {repositories { jcenter()}dependencies { classpath 'com.android.tools.build:gradle:2.3.1' classpath "io.realm:realm-gradle-plugin:3.5.
2017-07-18 18:48:37
863
原创 Android AOP基础
AOP概述AOP,即面向切面编程,是一种编程思想,强调的是在‘某一层面’上编写程序的方式,而这‘某一层面’就被称为切面。比如打印log,作为调试的一种手段,一般会渗透到项目中的许多地方,那么打印log就可看成是一种切 面,而AOP会指导我们怎样编写打印log会更好。AOP的主要目标是尽可能地对切面代码进行解耦。Android代码注入AOP采用代码注入技术来实现高度的代码解耦,而在Andro
2017-07-13 22:52:59
1165
原创 CookieSyncManager与CookieManager
Cookie什么是cookie:最理解就是http服务衍生出来的一种特殊的浏览器的缓存,特点是具有时效性、账户相关性、存储在客户端等。作用:作为客户端的用户认证的通行证,比如服务端可以通过cookie来区分到底是哪个用户。Android中Cookie的管理相关:说到cookie的管理,其实本质上就是数据的存储问题。在早期的cookie是由CookieSyncManager进行管理的,但是在sd
2017-07-13 18:58:26
14053
3
原创 Fiddler调试Android APP
Fiddler调试Android APP配置抓取Https请求首先启动Fiddler4客户端,如下图 选择菜单栏的Tools弹出的菜单栏Telerik Fiddler Options,会弹出如下子窗口 勾选中上图中的Capture HTTPS CONNECTs,其它都如上图的配置切换到Connections标签,选中Allow remote computers to connect,如下图 配置
2017-07-12 19:56:23
1978
原创 Android Instant App
一、什么是Android Instant App1、简单的理解就是google提出的小程序,大小限制在4M,依赖于google play的服务实现类似于打开网页url的方式来打开小程序。2、优点:免安装,体积小,借助于Android Studio 3.0和gradle4.0可以在原有项目基础上调整为支持instant app和installed app的工程结构。3、缺点:依赖goog
2017-07-04 15:17:32
7989
1
原创 Android Room
官方文档:https://developer.android.com/topic/libraries/architecture/room.html一、Room数据库框架结构1、数据实体对象:作为业务逻辑的数据结构组成部分,并且提供标准的get/set方法,如果有必要也需重写equals和hashCode方法。与DAO层的交互是通过注解的方式来实现的。(1)Entity注解:是在类层次上
2017-06-26 16:02:49
4852
原创 JobScheduler工作原理
一、工作流程:SystemServer start JobSchedulerService --> Clinet App getSystemService --> JobScheduler --> Binder --> JobSchedulerService --> schedule --> JobService1、事实上JobSchedulerService是系统的一种服务,启动流程
2017-06-26 10:14:21
2738
1
原创 Android O适配
官方文档:https://developer.android.com/preview/features/background.html#migration一、从Android O针对服务以及广播这两个组件做了如下的限制1、前台服务不受影响,但后台服务会被限制。首先需要确定应用是前台应用还是后台应用,只要满足以下任意一个都认为是前台App:(1)App有一个可见的Activiy(2)
2017-06-23 10:37:29
9661
原创 Android Calendar Provider总结
官方文档:https://developer.android.com/guide/topics/providers/calendar-provider.html一、什么是Calendar Provider 其实是就是Android专门用于存储用户的日程与日程事件的数据库,通过读写日程与日程事件相关数据可以不需要启动自己的应用而借助于系统日历应用做一些提醒用户的操作,应用场景:还贷提醒
2017-06-22 11:10:21
1506
原创 Android Architecture Components
官方文档:https://developer.android.com/topic/libraries/architecture/index.html官方实例:https://github.com/googlesamples/android-architecture-components注意:目前该架构还处于alpha阶段,涉及到的相关Api,比如ViewModel、Lifecycle、Li
2017-06-20 18:36:04
1207
原创 Maven常用命令
mvn clean:删除maven工程下的target目录mvn compile:编译Java代码,会在target/classes目录生成相应的class文件mvn package:将target/classes目录下的.class文件打成jar包,事实上该命令包含了compile过程mvn install:将target目录下的jar包安装到本地仓库(位置在C:\Users\use
2017-06-08 19:02:53
354
原创 git同步代码出现的问题
同步代码时出现问题,$ git pull --rebase originFirst, rewinding head to replay your work on top of it...fatal: Unable to create 'F:/code/Demo/.git/index.lock': File exists.Another git process seems to be run
2017-06-08 18:57:06
1324
原创 在AppCompatActivity中自定义toolbar出现的问题
使用AppCompatActivity自定义toolbar的问题,布局如下:<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match
2017-06-04 21:10:03
857
原创 Android KeyStore总结
一、Android KeyStore的应用1、存储密匙:Android提供的这个KeyStore最大的作用就是不需要开发者去维护这个密匙的存储问题,相比起存储在用户的数据空间或者是外部存储器都更加安全。注意的是这个密匙随着用户清除数据或者卸载应用都会被清除掉。2、得益于Android独立的一套密匙库系统,可以提高安全性二、实例:1、前提:Android安全相关特性是从Android6.0开始有较大的改动,而KeyStore就是一个很好的体现,很多新特性(如KeyGenParameterSpec)都是
2017-06-04 21:04:43
11633
原创 .gitignore文件配置
一、常见Android项目的.gitignore今天新建项目的时候发现.gitignore既然不起作用,使用git status命令查看时那是因为暂存状态下的
2017-06-03 10:44:54
514
原创 对所有对象都通用的方法
一、覆盖equals时请遵循通用的约定1、自反性:对象必选等于自身2、对称性:a.equals(b) 与b.equals(a)结果一致,实例如下A:"ABc" B:"abc"A.equals(B) => true(不区分大小写)B.equals(A) => false(区分大小写)3、传递性:保证a.equals(b),b.equals(c),a.equals(c)4
2016-05-07 22:41:47
458
原创 当Activity设置为透明主题时,按Home键,Dialog闪烁的解决方法
1、前提条件:(1)设置Activity的主题为透明主题(2)弹出对话框2、问题:按Home键时,Dialog会闪烁,不是自然的退出动画3、原因分析:(1)Activity设置成了透明主题,没有了正常的退出动画(2)Dialog依赖于Activity所在的父窗口,Activity透明不再做退出动画,而Dialog需要做退出动画,造成了闪烁。4、解
2016-05-07 22:23:55
6870
1
原创 消除过期的对象引用
一、JVM中的垃圾回收机制虽然会自动回收不再使用的对象,但是其回收机制是有前提的条件的,违背了中前提条件一般就会出现内存泄漏。而处于内存泄漏的对象特点如下:1、对象可达,即该对象还存在,还可以被访问2、对象无用,该对象永远都不会再被使用。二、过期引用1、定义:永远都不会被解除的引用2、特点:非常隐蔽,gc不会回收这中对象引用,而且也不会回收被该对象所引用的其他对象3
2016-04-25 00:05:47
890
原创 Java项目重构总结
重构步骤:一、先建立可靠的测试环境:测试的目的是用于确保重构出来的代码能稳定运行,否则一旦对外发布就会容易出现问题。总结:单元模块小重构,单元模块测试二、分解并重组1、什么情况下需要进行分解(1)冗长的代码(2)重复的代码2、方法(1)局部变量和参数(2)变量易名:提高代码的清晰度。(3)去除临时变量(4)使用多态取代多分支条件逻
2016-04-23 23:07:10
8116
原创 git reset撤销操作
命令:git reflog说明:该命令可以查看git历史操作记录,比如commit操作的记录应用场景:当你命令了git reset回退了某次本地commit之后,因为该commit还没提交到服务器上,你又想恢复到该次commit,就可以使用该命令查看该commit id,然后再执行git reset commit id操作就可以了
2016-04-18 22:06:21
870
原创 单元素枚举类型实现Singleton
1.公有域的singleton写法public class Apple { public transient final static Apple INSTANCE = new Apple(); public String getApple() { return "Apple"; }}2.单元素枚举类型的singleton写法public enu
2016-04-17 22:38:33
938
原创 adb常用命令总结
在开发Android 的系统应用时,以下adb命令都是比较常用的1、获取root权限:adb root,获取超级管理员权限 应用场景:访问应用数据(数据库、缓存、文件等),如data/data/包名/目录下的数据2、挂载命令:adb remount,该命令通常需要取得了root权限之后才能执行, 应用场景:最常用于卸载系统预装应用,如删除system/app/目
2016-04-15 23:06:48
736
原创 构建器模式
1.问题场景:设计某个类时,需要传入多个构造器参数(如6个参数),且这些参数中有必选参数(2个)和非必选参数(4个),那么该如何设计该类的构造器会更为合理呢?方案一:重叠构造器模式方案二:JavaBeans模式方案三:构建器模式... ...2.重叠构造器模式(1)形式:先提供一个包含了所有的构造参数的构造方法,再被其余的构造参数较少的构造方法来调用。简单的说,就是
2016-04-14 23:33:34
1113
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人