- 博客(21)
- 资源 (15)
- 收藏
- 关注
原创 Android View的工作原理
一、ViewRoot 和 DecorViewViewRoot 1.ViewRoot的实现类: ViewRootImpl 类2.作用:连接WindowManager 和 DecorView 的纽带,View 三大流程均是通过ViewRoot来完成的。当Activity对象被创建完毕后,会将DecorView 添加到Window中,同时会创建ViewRootImpl 对象,并将ViewRootImpl...
2018-03-29 21:38:26 105
原创 Android View的事件分发机制
一、点击事件的传递规则所谓点击事件的事件分发,其实就是对MotionEvent事件的分发过程,即当一个MotionEvent产生以后,系统需要把这个时间传递给一个具体的View,而这个传递过程就是分发过程。点击事件的分发过程由三个方法共同完成:dispatchTouchEvent, onInterceptTouchEvent 和 onTouchEvent.dispatchTouchEvent用来进...
2018-03-29 21:37:17 185
原创 ThreadLocal基本原理及应用
一、ThreadLocal是什么?关于ThreadLocal是什么,先来看看官方对它的解释.ThreadLocal并不是一个Thread,而是Thread的局部变量。当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每个线程都可以独立地改变自己的副本,而不影响其他线程所对应的副本。ThreadLocal并不是用来并发控制访问一个共同对象,而...
2018-03-28 21:54:11 1026
转载 详解UML类图
本文转自:深入浅出UML类图在UML 2.0的13种图形中,类图是使用频率最高的UML图之一。Martin Fowler在其著作《UML Distilled: A Brief Guide to the Standard Object Modeling Language, Third Edition》(《UML精粹:标准对象建模语言简明指南(第3版)》)中有这么一段:“If someone were...
2018-03-26 16:18:29 766
原创 淘宝vlayout框架的使用及源码分析(二)
上一篇文章主要讲解了vlayout在应用中该如何使用,接下里就从源码的分析一下vlayout到底是怎么实现的吧。vlayout的源码分析在前面说过,使用RecyclerView时,需要绑定一个Adapter和LayoutManager. vlayout并没有改变RecyclerView,而是增加了一些辅助。 它自定义了一个VirtualLayoutAdapter 和 一个VirtualLayout...
2018-03-25 14:32:25 468
原创 ButterKnife的使用介绍及原理探究(六)
前面分析了ButterKnife的源码,了解其实现原理,那么就将原理运用于实践吧。github地址: 点击打开链接一、自定义注解这里为了便于理解,只提供BindView注解。@Target(ElementType.FIELD)@Retention(RetentionPolicy.CLASS)public @interface BindView { int value();...
2018-03-23 20:16:39 136
原创 ButterKnife的使用介绍及原理探究(五)
本篇文章我们来看看ButterKnife对外提供的API。经过前面的分析,我们已经生成了java代码,那么这些方法怎样调用呢?实际上就是通过ButterKnife.bind()调用;那就来看看这个方法。bind() /** * BindView annotated fields and methods in the specified {@link Activity}. The curren...
2018-03-23 20:01:31 252
原创 淘宝vlayout框架的使用及源码分析(一)
VLayout是阿里开源的一个用于辅助RecyclerView的LayoutManager扩展库,通过使用LayoutHelper,可以实现一些负责的页面布局,这在阿里系的一些应用中都有体现。由于之前就针对VLayout做过研究,今天就写一篇文章做个总结吧。一、vlayout如何使用?(一)、 导入依赖库compile ('com.alibaba.android:vlayout:1.2.8@aar...
2018-03-23 15:49:48 953
原创 Android Handler机制浅析
本文是在读《Android开发艺术探索》这本书中关于“Android的消息机制”时所作记录,以便加深对Android的消息机制的理解。一、概述Android的消息机制主要是指Handler的运行机制,Handler的运行需要底层的MessageQueue 和 Looper的支撑。MessageQueue以队列的形式对外提供插入和删除的工作,虽然叫Queue,但实际上它是采用单链表的数据结构来存储消...
2018-03-22 21:49:41 182
转载 Android系统 Binder机制浅析(一)
Binder是Android系统中最重要的特征之一,它是系统间各个组件的桥梁,Android系统的开放式设计也很大程度上得益于这种极其方便的跨进程通信机制。理解Binder对于理解整个Android系统有着非常重要的作用,Android系统的四大组件,AMS,PMS等系统服务无一不与Binder 挂钩;要深入Android,Binder是必须迈出的一步。问题: 为什么需要跨进程通信(IPC)?怎么...
2018-03-22 21:41:06 276
原创 Android 6.0版本以上运行时权限解析(二)
上一篇文章我们主要介绍了在Android 6.0版本以上运行时权限的相关知识,并将使用方式进行了封装。但目前使用了Java注解+反射的方式实现,考虑到反射会影响到性能,下面将使用Java Annotation Processor处理(在此假设已经对Annotation Processor有了一些了解并会使用)。对外暴露的接口还是和原来一样, 先上一段源码吧。@AutoService(Process...
2018-03-22 21:34:44 187
原创 ButterKnife的使用介绍及原理探究(四)
上几篇文章主要分析了process方法收集信息的功能,接下来看生成代码,先看源码。@Override public boolean process(Set<? extends TypeElement> elements, RoundEnvironment env) { Map<TypeElement, BindingSet> bindingMap = findAnd...
2018-03-22 21:25:37 184
原创 ButterKnife的使用介绍及原理探究(三)
一、 检查合法性接着上一篇文章,继续对process()方法进行分析。在parseBindView方法中,先做了一次检查,如下: // Start by verifying common generated code restrictions. boolean hasError = isInaccessibleViaGeneratedCode(BindView.class, "fields", ...
2018-03-21 21:29:12 342
原创 Android Studio 3.0 导入项目报Error:Unable to resolve dependency for ':@debug/compileClasspath'错误的解决方案
之前使用Cordova CLI 生成的android 项目模板,在升级Android Studio 至3.0版本后,导入项目报如下错误:Android Studio 升级到3.0版本,gradle 会升级到4.1版本,导致了以上问题。在com.android.tools.build:gradle 3.x 以下版本依赖在gradle 中的声明写法compile fileTree(dir: 'libs...
2018-03-21 14:30:03 4468
转载 android-apt 切换到 annotationProcessor
为了使用 annotationProcessor 功能代替 android-apt,首先需要把你的 Android 工程所用的 Gradle 插件版本升级到 2.2 及以上,也就是修改工程根目录的 build.gradle 中的插件版本,修改如下:buildscript { repositories { jcenter() } dependencies {...
2018-03-21 13:35:50 179
原创 Android Studio 关于jar包、so库的问题
添加时so库的路径要设置正确,Android Studio 默认的so文件路径是app/src/main/jniLibs/armeabi,和eclipse是不一样的,这个一定要注意!使用Android Studio 添加jar包,和使用eclipse 添加jar包的方式相同;添加so库,如果没有jniLibs这个文件夹,创建一个,然后把so库放入文件夹中。当然,这个so文件的目录是可以指定的,比如...
2018-03-21 13:32:37 262
原创 Git SSH Key 生成步骤
Git是分布式的代码管理工具,远程的代码管理是基于SSH的,所以要使用远程的Git则需要SSH的配置。github的SSH配置如下:一 、设置Git的user name和email:$ git config --global user.name "your name"$ git config --global user.email "yourname@gmail.com"二、生成SSH密钥过程:1...
2018-03-21 13:29:37 117
原创 Android 中的Service解析
在Android系统中,到处可见service服务,service作为一个后台进程,执行一些特定的任务。在Android 应用开发过程中,不免也需要开发一些service来完成一些功能,而这种应用层的service只是整个Android Service这一概念的一部分而已,接下来将从Android系统平台的角度,详细剖析Android中的Service.下面,举几个例子来看一下Android平台中...
2018-03-21 13:22:23 179
原创 ButterKnife的使用介绍及原理探究(二)
一、预备知识通过上篇文章的介绍,相信已经对ButterKnife的使用熟悉了,网上也有很多讲解其使用的文章。 本篇主要探究一下ButterKnife的实现原理。但是在开始分析之前,可能还需要了解一下Java注解器Annotation Processor.推荐一篇文章: Java注解处理器读完这篇文章,相信你肯定会对Java注解处理器有了比较深的了解。二、原理 如果让我们实现一些注解的框...
2018-03-21 13:08:47 309
原创 ButterKnife的使用介绍及原理探究(一)
一、ButterKnife 是什么?Field and method binding for Android views which uses annotation processing to generate boilerplate code for you.Eliminate findViewById calls by using @BindView on fields.Group multi...
2018-03-21 13:02:50 870
原创 Android 6.0版本以上运行时权限解析(一)
一、概述随着Android 6.0发布以及普及,作为开发者所要应对的主要是新版本SDK带来的一些变化;首先关注的就是权限机制的变化,Android 6.0以后增加了运行时权限(Runtime Permissions)。本篇文章的目的就是对运行时权限处理做一个简单的介绍,并实现在应用开发过程中对权限管理的封装。GitHub地址: 点击打开链接 二、运行时权限在Android 6.0以前,在安装应用的...
2018-03-13 21:38:35 313
基于MQTT的实时消息推送系统
2018-08-29
RabbitMQ for Android
2018-08-08
Linear Algebra and Its Applications
2018-08-03
android studio fataar-plugin
2018-08-03
Mastering Machine Learning with scikit-learn
2018-08-03
中国金融集成电路(IC)规范pboc3.0
2016-07-22
android 5.0新特性的使用
2015-11-12
Rtsp 源代码
2015-10-29
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人