自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Android

安卓笔记

  • 博客(45)
  • 资源 (3)
  • 收藏
  • 关注

原创 CoorinatorLayout协调者布局

CoorinatorLayout是官方号称的一种功能十分强大的FrameLayout(注意最新的实现是ViewGroup),主要有以下的两种基本应用场景: 1. 作为应用的顶层装饰布局; 2. 作为协调有交互依赖的子View的容器。用法CoorinatorLayout已流行了好一段时间,抽屉型Toolbar布局则是很经典的样例,推荐Mastering the ...

2018-05-02 12:08:49 2368

原创 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 965

原创 Javassist基础与实践

概述对于Javassist可理解成在java语言层面上直接操纵java字节码的一种工具。经典应用场景是在构建java代码阶段直接修改字节码,如代码插桩。特点:更改原有class:增、删和修改class中的字段或方法;修改类的继承结构新增class:增加字段、方法、构造方法;注意不能新增接口。新增接口:只适用于接口新增注解:用于创建注解核心基础CtClass:Javassist并不是直接操

2017-11-02 11:18:12 2269

原创 Gradle Transform

概述Gradle Transform是Android官方提供给开发者在项目构建阶段即由class到dex转换期间修改class文件的一套api。目前比较经典的应用是字节码插桩、代码注入技术。基础TransformInput:所谓Transform就是对输入的class文件转变成目标字节码文件,TransformInput就是这些输入文件的抽象。目前它包括两部分:DirectoryInput集合与J

2017-09-25 10:48:43 10102 5

原创 Android Studio插件开发基础

概述目前IntelliJ IDEA作为一款极其出色的IDE,它可借助于各种灵活的插件来实现强大的功能。虽然Android Studio是基于IDEA,但不能直接在Android Studio中进行插件的开发,幸运的是IDEA的插件是可以兼容Android Studio的。核心基础开发语言:插件的开发语言是java,而插件本质上是一个jar包,从远程服务器下载或本地磁盘被安装到IDEA

2017-09-21 18:45:52 727

原创 Gradle之多项目与混合构建

Multi-project builds随着大型的单项目构建发展所面临的各种挑战,多项目构建应运而生。多项目构建的结构如下:包括一个root顶层项目(包括build和setting脚本),之下再包含一个或多个子项目(包含build脚本):root-project├── build.gradle├── gradle│ └── wrapper│ ├── gradle-wrap

2017-09-15 15:17:18 3065

原创 Gradle基础

Gradle概述Gradle作为一种项目构建的工具,其最大优势是借助于插件可以灵活地实现功能十分复杂、用途极其广泛的项目构建。Groovy与Gradle DSLGroovy作为在java之上设计的脚本语言,相比java,它的代码会更加的简洁优雅(比如方法定义十分简洁,方法的调用可省略圆括号等)这种语言特性使得Groovy特别适合用于设计DSL。DSL:领域专用语言,简单理解就是一种只能在某种具体

2017-09-11 17:39:23 790 1

原创 自定义Gradle插件

Gradle插件Gradle插件好处:在Gradle构建过程中涉及到的通用逻辑,如果将其封装成插件,就可在多个工程项目构建中复用。Gradle插件开发语言:Groovy、Java与Scala。不管使用哪种语言,最终都是以字节码的方式被引入Gradle。Gradle插件开发方式Build script:直接在Gradle文件中开发,好处是流程相对简单,因为Gradle会自动编译并引入,坏处是这

2017-08-24 20:19:40 1719

原创 Groovy语法之闭包

闭包概述闭包就是一个特殊的代码块闭包格式闭包的格式定义如下:{ [closureParameters -> ] statements }示例:{ item++ } { -> item++ } { printl

2017-08-23 19:44:38 1269

原创 Groovy语法之类

groovy与java的类的区别groovy与java的类大同小异,从分类来看:分为普通类、匿名类、抽象类、接口、匿名内部类;从自定义来看:标识符class、访问限定符(public、protected 、private、static),属性与方法的定义等都非常类似。访问权限的区别:groovy的class将java中默认访问权限与public等效,即没有指定访问限定符都被当成public

2017-08-21 15:36:25 1227

原创 Groovy语法之操作符

1. Groovy的算术运算操作相比Java多了对幂运算的支持,用法如下:相比Java,Groovy支持**安全运算符**(?.),可有效避免空指针异常。2. Groovy支持**方法指针操作符**(.&),原理是通过变量来存放某个方法的指针,即可使用这个变量来调用这个方法。3. 相比java,groovy提供**模式运算符**(~)可方便创建java.util.regex.Pattern的示例。... ...

2017-08-17 14:44:25 1930

原创 Groovy语法基础

Groovy与JavaGroovy是一种与Java非常相似的脚本语言,该脚本语言会被编译成class字节码文件,最终运行于Java虚拟机上。环境配置前提是配置好JDKGroovy环境在类Unix上配置,只需以下的几行命令即可:第一步下载sdkman,这是管理sdk的工具,命令如下:curl -s get.sdkman.io | bash 读取并执行sdkman的初始化脚

2017-08-09 16:09:24 1450

原创 Android Fabric工作原理

Fabric简介Fabric是国外流行的log收集与分析工具,图表数据非常直观,关于其配置详情请看官网。这里主要是分析,Fabric是如何做到上报log的。注意这里涉及的Fabric版本是1.3.10,注意虽然源码是一直在变化,但原理是万变不离其宗的。工作原理Java异常处理流程可以简单总结成如下两种情况: (1) 未添加异常处理:throw exceptoon –> DefaultUncau

2017-08-09 10:20:32 4554

原创 Realm源码分析之自动更新原理

Realm的Model的自动更新机制是比较有趣的特性,如下自动更新代码:

2017-08-02 19:47:43 1381

原创 Realm源码分析之copyToRealm与copyToRealmOrUpdate

1. **copyToRealm与copyToRealmOrUpdate:前者是给未指明主键的model使用的,后者则是给指明主键的model使用。** 2. **copyToRealm对应无主键参数的createObject,区别是copyToRealm会复用Realm缓存的model示例,不会每次都创建新的model实例。** 3. **copyToRealmOrUpdate对应有主键参数的create

2017-07-28 16:14:44 3466

原创 Realm源码分析之Writes

上篇是Realm源码分析的开篇,是关于Realm数据库的初始化,关键一点是要抓住RealmProxyMediator这个代理中介者的实例化过程。在理解了Realm初始化之后,接下来就可以追踪Realm数据库读写等操作的源码了。因篇幅限制,先分析Writes。

2017-07-26 15:50:14 1585

原创 Realm源码分析之初始化

Realm源码下载上篇Realm总结是关于Realm的基础使用,可粗略地概括为如下关系图: 在感受了Realm的强大之后,更让人对其背后的实现原理感到好奇,点击下载Realm源码一探究竟吧。目前Realm java的版本是3.5,如下工程截图,模块简介如下: realm-java工程囊括了好几个模块,而编译配置说明是在工程根目录下的README.mdexamples模块是

2017-07-21 22:41:21 2679

原创 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 845

原创 Android AOP基础

AOP概述AOP,即面向切面编程,是一种编程思想,强调的是在‘某一层面’上编写程序的方式,而这‘某一层面’就被称为切面。比如打印log,作为调试的一种手段,一般会渗透到项目中的许多地方,那么打印log就可看成是一种切 面,而AOP会指导我们怎样编写打印log会更好。AOP的主要目标是尽可能地对切面代码进行解耦。Android代码注入AOP采用代码注入技术来实现高度的代码解耦,而在Andro

2017-07-13 22:52:59 1132

原创 CookieSyncManager与CookieManager

Cookie什么是cookie:最理解就是http服务衍生出来的一种特殊的浏览器的缓存,特点是具有时效性、账户相关性、存储在客户端等。作用:作为客户端的用户认证的通行证,比如服务端可以通过cookie来区分到底是哪个用户。Android中Cookie的管理相关:说到cookie的管理,其实本质上就是数据的存储问题。在早期的cookie是由CookieSyncManager进行管理的,但是在sd

2017-07-13 18:58:26 13944 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 1962

原创 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 7894 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 4815

原创 JobScheduler工作原理

一、工作流程:SystemServer start JobSchedulerService --> Clinet App getSystemService --> JobScheduler --> Binder --> JobSchedulerService --> schedule --> JobService1、事实上JobSchedulerService是系统的一种服务,启动流程

2017-06-26 10:14:21 2725 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 9639

原创 Android Calendar Provider总结

官方文档:https://developer.android.com/guide/topics/providers/calendar-provider.html一、什么是Calendar Provider    其实是就是Android专门用于存储用户的日程与日程事件的数据库,通过读写日程与日程事件相关数据可以不需要启动自己的应用而借助于系统日历应用做一些提醒用户的操作,应用场景:还贷提醒

2017-06-22 11:10:21 1453

原创 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 1187

原创 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 338

原创 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 1232

原创 在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 838

原创 Android KeyStore总结

一、Android KeyStore的应用1、存储密匙:Android提供的这个KeyStore最大的作用就是不需要开发者去维护这个密匙的存储问题,相比起存储在用户的数据空间或者是外部存储器都更加安全。注意的是这个密匙随着用户清除数据或者卸载应用都会被清除掉。2、得益于Android独立的一套密匙库系统,可以提高安全性二、实例:1、前提:Android安全相关特性是从Android6.0开始有较大的改动,而KeyStore就是一个很好的体现,很多新特性(如KeyGenParameterSpec)都是

2017-06-04 21:04:43 11413

原创 .gitignore文件配置

一、常见Android项目的.gitignore今天新建项目的时候发现.gitignore既然不起作用,使用git status命令查看时那是因为暂存状态下的

2017-06-03 10:44:54 503

原创 对所有对象都通用的方法

一、覆盖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 448

原创 当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 6778 1

原创 消除过期的对象引用

一、JVM中的垃圾回收机制虽然会自动回收不再使用的对象,但是其回收机制是有前提的条件的,违背了中前提条件一般就会出现内存泄漏。而处于内存泄漏的对象特点如下:1、对象可达,即该对象还存在,还可以被访问2、对象无用,该对象永远都不会再被使用。二、过期引用1、定义:永远都不会被解除的引用2、特点:非常隐蔽,gc不会回收这中对象引用,而且也不会回收被该对象所引用的其他对象3

2016-04-25 00:05:47 879

原创 Java项目重构总结

重构步骤:一、先建立可靠的测试环境:测试的目的是用于确保重构出来的代码能稳定运行,否则一旦对外发布就会容易出现问题。总结:单元模块小重构,单元模块测试二、分解并重组1、什么情况下需要进行分解(1)冗长的代码(2)重复的代码2、方法(1)局部变量和参数(2)变量易名:提高代码的清晰度。(3)去除临时变量(4)使用多态取代多分支条件逻

2016-04-23 23:07:10 8039

原创 git reset撤销操作

命令:git reflog说明:该命令可以查看git历史操作记录,比如commit操作的记录应用场景:当你命令了git reset回退了某次本地commit之后,因为该commit还没提交到服务器上,你又想恢复到该次commit,就可以使用该命令查看该commit id,然后再执行git reset commit id操作就可以了

2016-04-18 22:06:21 853

原创 单元素枚举类型实现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 930

原创 adb常用命令总结

在开发Android 的系统应用时,以下adb命令都是比较常用的1、获取root权限:adb root,获取超级管理员权限      应用场景:访问应用数据(数据库、缓存、文件等),如data/data/包名/目录下的数据2、挂载命令:adb remount,该命令通常需要取得了root权限之后才能执行,      应用场景:最常用于卸载系统预装应用,如删除system/app/目

2016-04-15 23:06:48 719

原创 构建器模式

1.问题场景:设计某个类时,需要传入多个构造器参数(如6个参数),且这些参数中有必选参数(2个)和非必选参数(4个),那么该如何设计该类的构造器会更为合理呢?方案一:重叠构造器模式方案二:JavaBeans模式方案三:构建器模式... ...2.重叠构造器模式(1)形式:先提供一个包含了所有的构造参数的构造方法,再被其余的构造参数较少的构造方法来调用。简单的说,就是

2016-04-14 23:33:34 1097

Fragment应用实例

这是依据谷歌官方Api提供的实例写的一个Fragment应用实例

2014-05-08

DSPF28335资料

最近看的资料,推荐给DSP爱好者,感觉不错,适合初学者

2013-01-19

点阵液晶取模

方便对无字库液晶12864取模,最适合喜欢在proteus下用液晶的人

2012-08-20

空空如也

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

TA关注的人

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