Android
文章平均质量分 86
Dson2020
一步一个脚印
展开
-
Application类学习总结
一、Application继承关系:Application extends ContextWrapper implements ComponentCallbacks21、ContextWrapper继承关系:ContextWrapper extends Context,从类名上理解即是对Context类的包装。源码注释:Proxying implementation of Context原创 2015-08-18 14:40:12 · 1729 阅读 · 0 评论 -
Realm源码分析之copyToRealm与copyToRealmOrUpdate
1. **copyToRealm与copyToRealmOrUpdate:前者是给未指明主键的model使用的,后者则是给指明主键的model使用。** 2. **copyToRealm对应无主键参数的createObject,区别是copyToRealm会复用Realm缓存的model示例,不会每次都创建新的model实例。** 3. **copyToRealmOrUpdate对应有主键参数的create原创 2017-07-28 16:14:44 · 3519 阅读 · 0 评论 -
Realm源码分析之初始化
Realm源码下载上篇Realm总结是关于Realm的基础使用,可粗略地概括为如下关系图: 在感受了Realm的强大之后,更让人对其背后的实现原理感到好奇,点击下载Realm源码一探究竟吧。目前Realm java的版本是3.5,如下工程截图,模块简介如下: realm-java工程囊括了好几个模块,而编译配置说明是在工程根目录下的README.mdexamples模块是原创 2017-07-21 22:41:21 · 2744 阅读 · 0 评论 -
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 · 929 阅读 · 0 评论 -
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 · 1994 阅读 · 0 评论 -
Android Fabric工作原理
Fabric简介Fabric是国外流行的log收集与分析工具,图表数据非常直观,关于其配置详情请看官网。这里主要是分析,Fabric是如何做到上报log的。注意这里涉及的Fabric版本是1.3.10,注意虽然源码是一直在变化,但原理是万变不离其宗的。工作原理Java异常处理流程可以简单总结成如下两种情况: (1) 未添加异常处理:throw exceptoon –> DefaultUncau原创 2017-08-09 10:20:32 · 4582 阅读 · 0 评论 -
Groovy语法之闭包
闭包概述闭包就是一个特殊的代码块闭包格式闭包的格式定义如下:{ [closureParameters -> ] statements }示例:{ item++ } { -> item++ } { printl原创 2017-08-23 19:44:38 · 1288 阅读 · 0 评论 -
自定义Gradle插件
Gradle插件Gradle插件好处:在Gradle构建过程中涉及到的通用逻辑,如果将其封装成插件,就可在多个工程项目构建中复用。Gradle插件开发语言:Groovy、Java与Scala。不管使用哪种语言,最终都是以字节码的方式被引入Gradle。Gradle插件开发方式Build script:直接在Gradle文件中开发,好处是流程相对简单,因为Gradle会自动编译并引入,坏处是这原创 2017-08-24 20:19:40 · 1750 阅读 · 0 评论 -
Android KeyStore总结
一、Android KeyStore的应用1、存储密匙:Android提供的这个KeyStore最大的作用就是不需要开发者去维护这个密匙的存储问题,相比起存储在用户的数据空间或者是外部存储器都更加安全。注意的是这个密匙随着用户清除数据或者卸载应用都会被清除掉。2、得益于Android独立的一套密匙库系统,可以提高安全性二、实例:1、前提:Android安全相关特性是从Android6.0开始有较大的改动,而KeyStore就是一个很好的体现,很多新特性(如KeyGenParameterSpec)都是原创 2017-06-04 21:04:43 · 11734 阅读 · 0 评论 -
Android AOP基础
AOP概述AOP,即面向切面编程,是一种编程思想,强调的是在‘某一层面’上编写程序的方式,而这‘某一层面’就被称为切面。比如打印log,作为调试的一种手段,一般会渗透到项目中的许多地方,那么打印log就可看成是一种切 面,而AOP会指导我们怎样编写打印log会更好。AOP的主要目标是尽可能地对切面代码进行解耦。Android代码注入AOP采用代码注入技术来实现高度的代码解耦,而在Andro原创 2017-07-13 22:52:59 · 1190 阅读 · 0 评论 -
Gradle之多项目与混合构建
Multi-project builds随着大型的单项目构建发展所面临的各种挑战,多项目构建应运而生。多项目构建的结构如下:包括一个root顶层项目(包括build和setting脚本),之下再包含一个或多个子项目(包含build脚本):root-project├── build.gradle├── gradle│ └── wrapper│ ├── gradle-wrap原创 2017-09-15 15:17:18 · 3131 阅读 · 0 评论 -
Android Studio插件开发基础
概述目前IntelliJ IDEA作为一款极其出色的IDE,它可借助于各种灵活的插件来实现强大的功能。虽然Android Studio是基于IDEA,但不能直接在Android Studio中进行插件的开发,幸运的是IDEA的插件是可以兼容Android Studio的。核心基础开发语言:插件的开发语言是java,而插件本质上是一个jar包,从远程服务器下载或本地磁盘被安装到IDEA原创 2017-09-21 18:45:52 · 756 阅读 · 0 评论 -
Gradle基础
Gradle概述Gradle作为一种项目构建的工具,其最大优势是借助于插件可以灵活地实现功能十分复杂、用途极其广泛的项目构建。Groovy与Gradle DSLGroovy作为在java之上设计的脚本语言,相比java,它的代码会更加的简洁优雅(比如方法定义十分简洁,方法的调用可省略圆括号等)这种语言特性使得Groovy特别适合用于设计DSL。DSL:领域专用语言,简单理解就是一种只能在某种具体原创 2017-09-11 17:39:23 · 805 阅读 · 1 评论 -
Gradle Transform
概述Gradle Transform是Android官方提供给开发者在项目构建阶段即由class到dex转换期间修改class文件的一套api。目前比较经典的应用是字节码插桩、代码注入技术。基础TransformInput:所谓Transform就是对输入的class文件转变成目标字节码文件,TransformInput就是这些输入文件的抽象。目前它包括两部分:DirectoryInput集合与J原创 2017-09-25 10:48:43 · 10165 阅读 · 5 评论 -
Javassist基础与实践
概述对于Javassist可理解成在java语言层面上直接操纵java字节码的一种工具。经典应用场景是在构建java代码阶段直接修改字节码,如代码插桩。特点:更改原有class:增、删和修改class中的字段或方法;修改类的继承结构新增class:增加字段、方法、构造方法;注意不能新增接口。新增接口:只适用于接口新增注解:用于创建注解核心基础CtClass:Javassist并不是直接操原创 2017-11-02 11:18:12 · 2345 阅读 · 0 评论 -
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 · 1013 阅读 · 0 评论 -
Realm源码分析之自动更新原理
Realm的Model的自动更新机制是比较有趣的特性,如下自动更新代码:原创 2017-08-02 19:47:43 · 1414 阅读 · 0 评论 -
Groovy语法基础
Groovy与JavaGroovy是一种与Java非常相似的脚本语言,该脚本语言会被编译成class字节码文件,最终运行于Java虚拟机上。环境配置前提是配置好JDKGroovy环境在类Unix上配置,只需以下的几行命令即可:第一步下载sdkman,这是管理sdk的工具,命令如下:curl -s get.sdkman.io | bash 读取并执行sdkman的初始化脚原创 2017-08-09 16:09:24 · 1510 阅读 · 0 评论 -
AndroidManifest总结
一、AndroidManifest的文件当创建工程时,一般情况下IDE都会自动在该工程的根目录下创建AndroidManifest的文件,而当编译工程打包apk时,该文件会一起被打包成apk,而这个文件是系统管理该apk的入口。个人认为在实际项目开发中,该AndroidManifest文件的主要作用有两点:一是向系统声明该app包含了哪种类型的组件,二是申请权限。二、Android原创 2015-08-15 17:59:03 · 4688 阅读 · 0 评论 -
Activity重要方法总结
一、Activity的继承关系:Activity extends ContextThemeWrapperimplements LayoutInflater.Factory2,Window.Callback, KeyEvent.Callback,OnCreateContextMenuListener, ComponentCallbacks2,Window.OnWindowDi原创 2015-08-15 21:53:10 · 7231 阅读 · 0 评论 -
当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 · 6916 阅读 · 1 评论 -
在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 · 865 阅读 · 0 评论 -
Android Calendar Provider总结
官方文档:https://developer.android.com/guide/topics/providers/calendar-provider.html一、什么是Calendar Provider 其实是就是Android专门用于存储用户的日程与日程事件的数据库,通过读写日程与日程事件相关数据可以不需要启动自己的应用而借助于系统日历应用做一些提醒用户的操作,应用场景:还贷提醒原创 2017-06-22 11:10:21 · 1534 阅读 · 0 评论 -
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 · 4875 阅读 · 0 评论 -
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 · 8041 阅读 · 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 · 9670 阅读 · 0 评论 -
CookieSyncManager与CookieManager
Cookie什么是cookie:最理解就是http服务衍生出来的一种特殊的浏览器的缓存,特点是具有时效性、账户相关性、存储在客户端等。作用:作为客户端的用户认证的通行证,比如服务端可以通过cookie来区分到底是哪个用户。Android中Cookie的管理相关:说到cookie的管理,其实本质上就是数据的存储问题。在早期的cookie是由CookieSyncManager进行管理的,但是在sd原创 2017-07-13 18:58:26 · 14092 阅读 · 3 评论 -
JobScheduler工作原理
一、工作流程:SystemServer start JobSchedulerService --> Clinet App getSystemService --> JobScheduler --> Binder --> JobSchedulerService --> schedule --> JobService1、事实上JobSchedulerService是系统的一种服务,启动流程原创 2017-06-26 10:14:21 · 2766 阅读 · 1 评论 -
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 · 1216 阅读 · 0 评论 -
Groovy语法之类
groovy与java的类的区别groovy与java的类大同小异,从分类来看:分为普通类、匿名类、抽象类、接口、匿名内部类;从自定义来看:标识符class、访问限定符(public、protected 、private、static),属性与方法的定义等都非常类似。访问权限的区别:groovy的class将java中默认访问权限与public等效,即没有指定访问限定符都被当成public原创 2017-08-21 15:36:25 · 1323 阅读 · 0 评论 -
Groovy语法之操作符
1. Groovy的算术运算操作相比Java多了对幂运算的支持,用法如下:相比Java,Groovy支持**安全运算符**(?.),可有效避免空指针异常。2. Groovy支持**方法指针操作符**(.&),原理是通过变量来存放某个方法的指针,即可使用这个变量来调用这个方法。3. 相比java,groovy提供**模式运算符**(~)可方便创建java.util.regex.Pattern的示例。... ...原创 2017-08-17 14:44:25 · 2029 阅读 · 0 评论 -
CoorinatorLayout协调者布局
CoorinatorLayout是官方号称的一种功能十分强大的FrameLayout(注意最新的实现是ViewGroup),主要有以下的两种基本应用场景: 1. 作为应用的顶层装饰布局; 2. 作为协调有交互依赖的子View的容器。用法CoorinatorLayout已流行了好一段时间,抽屉型Toolbar布局则是很经典的样例,推荐Mastering the ...原创 2018-05-02 12:08:49 · 2433 阅读 · 0 评论