自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(200)
  • 资源 (9)
  • 收藏
  • 关注

原创 Gradle之定义Task

1 TaskTask可以理解为Gradle的执行单元,实在是太重要了。根据前面的分析,Gradle通过一个个task来完成具体的构建任务,下面我们来看下Task的定义。最简单直接,通过如下方式来定义:task myTask { println "config myTask"}// 执行下D:\0.GitHub\seniorlibs> gradlew myTaskcon...

2019-07-14 10:54:47 260

原创 Gradle之Gradle执行时序

12settings.gradle startsettings.gradle start> Configure project :seniorlibs.gradle startseniorlibs.gradle end> Configure project :appapp.gradle startapp.gradle end> Configure pro...

2019-07-11 07:52:40 192

原创 Gradle之Groovy基础

1 前言最近在学习Gradle,把过程中都,Gradle从入门到实战,包括:(1)Groovy基础;(2)全面理解Gradle;(3)如何创建Gradle插件;(5)实战,从0到1完成一款Gradle插件23 Groovy基础和结果/** * 在当面目录下创建build.gradle文件,在里面创建一个task,然后在task中编写Groovy代码即可 * * 只需要在hav...

2019-07-07 22:56:47 273

原创 Android自定义View最佳实践

1 自定义View的分类1.1 继承View重写onDraw方法这种方法主要用于实现一些不规则的效果,即这种效果不方便通过布局的组合方式来达到。需要通过绘制的方式来实现,即重写onDraw()方法。一般就是想自己实现某些图形了,因为原生控件已经满足不了你了,很显然这需要绘制的方式来完成,采用这个方式需要自身支=warp_content,并且pading也要自己处理,比较考验你的功底了。2 自...

2019-05-05 23:42:03 3200

原创 Java进阶之深入理解深拷贝和浅拷贝

1 Java的clone方法1.1 什么是clone()方法?(1)在实际编程过程中,我们要遇到这种情况:有一个对象A,在某一时刻A中已经包含了一些有效值,此时可能会需要一个和A完全相同新对象B,并且此后对B任何改动都不会影响到A中的值。也就是说,A与B是两个独立的对象,但B的初始值是由A对象确定的。用简单的赋值语句是不能满足这种需求的,要满足这种需求虽然有很多途径,但实现clone()方法是...

2019-03-07 21:11:29 558

原创 Android基础之IntentFilter的匹配规则

1 启动Activity的方式(1)启动Activity分为两种,显示调用和隐式调用。显示调用需要明确的指定被启动对象的组件信息,包括包名和类名;而隐式意图则不需要明确指定调用信息。原则上一个intent不应该即是显式又是隐式调用,如果二者共存的话以显式调用为主。(2)隐式调用需要intent能够匹配目标组件的IntentFilter中所设置的过滤信息,一个Activity钟可以有多个inte...

2019-02-26 00:21:13 1085

原创 Android刘海屏适配方案

1 什么是刘海屏屏幕的正上方居中位置(下图黑色区域)会被挖掉一个孔,屏幕被挖掉的区域无法正常显示内容,这种类型的屏幕就是刘海屏,也有其他叫法:挖孔屏、凹凸屏等等,这里统一按刘海屏命名。  现在市场上的情况来说,“刘海屏”主要分成两类,一类是标准的 Android P Api,另外一类就是厂商在 Android P 以下的系统,做的特殊适配。2 刘海屏适配方案2.1 需要适配刘海屏的页面(...

2019-02-14 00:42:06 4162

原创 Flutter:编写第一个应用

1 开发环境搭建Flutter之Windows环境搭建Flutter基础篇(4)-- Flutter填坑全面总结解决Flutter Could not find lint-gradle-api.jar2 未完待续

2019-01-26 21:25:39 251 2

原创 Android进阶之探究ActivityLifecycleCallbacks

1 ActivityLifecycleCallbacks用来监听所有Activity的生命周期回调Activity 的每一个生命周期都对应 ActivityLifecycleCallbacks 接口中的一个方法,比如 onActivityCreated 回调是在 Activity 的 onCreate 方法中调用 getApplication().dispatchActivityCreated(...

2018-12-15 15:37:31 782

原创 Android进阶之将注解@IntDef @StringDef替代枚举类(enum)

1 概述Enum是java中一种包含固定常数的类型。当我们需要预先定义一些值,并限定范围时,使用 Enum,来做到编写和编译都查错。  Java的Enum的实质是特殊单例的静态成员变量,可以在编写器,编译器做到各种静态检查防呆;在运行期,所有枚举类作为单例,全部加载到内存中。  因此,Enum增加了APK的内存占用,比常量多5到10倍的内存占用。所以放弃枚举,就是关于安卓应用性能的内存占用部...

2018-12-02 12:06:31 1527 6

原创 Android进阶之通识基础

1 数据类型字节数1.1 字节一个字节,8个二进制位1.2 字节数(1) 32位编译器(2) 64位编译器2 正负数二进制的表示2.1 正负数二进制的表示(1)正数的值,第一位以0作为正数标识,直接去二进制转10进制,方便计算0开头对应的值。无符号数表示范围为0——255,如下:①最大为11111111,127+1*26+125+1*24+123+1*22+121+1*2...

2018-12-01 00:44:34 231

原创 Android进阶之View.inflate和LayoutInflater.inflate方法区别

1 LayoutInflater  LayoutInflater用于加载布局的。加载布局的任务通常都是在Activity中调用setContentView()方法来完成的。其实setContentView()方法的内部也是使用LayoutInflater来加载布局的,只不过这部分源码是内部的。   我们先看下LayoutInflater的基本用法,首先需要获取到LayoutInflater的...

2018-09-02 11:39:43 15471 4

原创 Android系统分析之ThreadLocal

1 ThreadLocal操作示例1.1 例子public class MainActivity extends AppCompatActivity { private static final String TAG = "ThreadLoacalTest"; @Override protected void onCreate(Bundle savedInsta

2018-07-28 23:20:14 267 2

原创 Android进阶之Android build构建流程

1 Apk构建基本流程  详细研究,把代码编译成一个apk文件并安装到手机上的这个过程中,是怎么把代码和资源文件打包成一个apk文件,并安装到手机上的?   此图描述了:Android Project经过编译和打包后生成apk文件,然后再经过签名,就可以安装到设备上。   将一个实际的apk文件后缀改为zip并解压后,得到的内容如下。classes.dex…resources...

2018-06-19 00:12:46 3927 4

原创 Java多线程之深入理解线程池

1 基本概念  线程池,就是一个线程的池子,里面有若干线程,它们的目的就是执行提交给线程池的任务,执行完一个任务后不会退出,而是继续等待或执行新任务。   线程池主要由两个概念组成,一个是任务队列,另一个是工作者线程,工作者线程主体就是一个循环,循环从队列中接受任务并执行,任务队列保存待执行的任务。   线程池的概念类似于生活中的一些排队场景,比如在火车站排队购票、在医院排队挂号、在银行排...

2018-05-27 00:07:51 830 2

原创 Android进阶之四大组件综述

  本篇文章概述分析Android四大组件的机制,插入本人其他的博客链接方便阅读,以及为接下来写四大组件的内部工作过程铺垫。1 Android四大组件的运行状态  Android四大组件包括Activity、Service、BroadcastReceiver和ContentProvider。除了BroadcastReceiver以外,其他三种组件都必须在AndroidManifest中...

2018-05-13 22:20:41 570

原创 Android系统分析之JVM/DVM、垃圾回收机制与类加载器

1 Java虚拟机1.1 JVM(Java Virtual Machine,Java虚拟机)  JVM的中文名称叫Java虚拟机,它是由软件技术模拟出计算机运行的一个虚拟的计算机。JVM也充当着一个翻译官的角色,我们编写出的Java程序,是不能够被操作系统所直接识别的,由JVM负责把程序翻译给系统“听”,告诉它我们的程序需要做什么操作。   JVM在每个操作系统中有其对应的Java解...

2018-03-21 21:38:03 2074

原创 Java基础之深入理解final关键字

1 含义  final在Java中是一个保留的关键字,可以声明成员变量、方法、类以及本地变量。一旦你将引用声明作final,你将不能改变这个引用了,编译器会检查代码,如果你试图将变量再次初始化的话,编译器会报编译错误。final变量是只读的。2 分类2.1 什么是final变量?  凡是对成员变量或者本地变量声明为final的都叫作final变量。final变量经常和sta...

2018-03-12 09:34:48 1301

原创 Android源码分析之分享公共库框架

分享公共库使用说明文档(友盟6.4.5)1 引入公共库(1)在build.gradle添加仓库地址(2)在build.gradle中引入’com.guan.codelibs:share:1.0.0’(3)例子如下:dependencies { compile 'com.guan.codelibs:share:1.0.0'}2 配置Android Manifes...

2018-03-03 21:16:24 524 3

原创 Java进阶之Sax、Dom和Pull解析xml

1 概念  Java的xml解析器库有很多,万变不离其宗的就是SAX和DOM解析器。1.1 DOM解析  DOM的全称是Document Object Model,也即文档对象模型。在应用程序中,基于DOM的XML分析器将一个XML文档转换成一个对象模型的集合(通常称DOM树),应用程序正是通过对这个对象模型的操作,来实现对XML文档数据的操作。通过DOM接口,应用程序可以在任何时候访...

2018-02-08 21:07:43 427

原创 Android系统分析之View绘制流程与源码分析

1 概念  有分析到Activity中界面加载显示的基本流程原理,记不记得最终分析结果就是下面的关系,id为content的内容就是整个View树的结构,所以对每个具体View对象的操作,其实就是个递归的实现。   整个View树的绘图流程是在ViewRootImpl类的performTraversals()方法开始的(在上一篇博客—-Android系统分析之Window的视图对象的创建...

2018-02-07 00:39:36 477

转载 Android系统分析之Window的视图对象的创建过程分析(本文转载)

1 参考链接Android应用程序窗口(Activity)的视图对象(View)的创建过程分析 Android应用setContentView与LayoutInflater加载解析机制源码分析Android应用程序窗口(Activity)与WindowManagerService服务的连接过程分析 2 概念  每一个Activity都有一个关联的Window对象,用来描述一...

2018-02-05 22:45:35 989 1

原创 Android进阶之深入理解ContentProvider

1 介绍  ContentProvider(内容提供者):为存储和获取数据提供统一的接口。使用ContentProvider,应用程序可以实现跨进程通信–App间数据共享。Android内置的许多数据都是使用ContentProvider形式,供开发者调用的(如视频,音频,图片,通讯录等)。 图片来源于:Android基础入门教程——4.4.1 ContentProvider初探2 ...

2018-02-02 09:47:12 668

原创 Android进阶之深入理解Service

1 介绍  Service是android的一种机制。Service是运行在后台的代码,不能与用户交互,可以运行在自己的进程,也可以运行在其他应用程序的上下文里。需要通过某一个Activity或其他Context对象来调用。1.1 Service的生命周期   被启动的服务的生命周期:如果一个Service被某个Activity调用 Context.startService方法...

2018-01-31 23:58:04 651 1

原创 Android进阶之深入理解BroadcastReceiver

1 介绍1.1 定义  广播是一个全局的监听器,属于Android四大组件之一。Android广播分为两个角色:广播发送者、广播接收者。1.2 作用  监听/接收应用App发出的广播消息,并做出响应。1.3 应用场景Android不同组件间的通信(含 :应用内 / 不同应用之间)多线程通信与Android系统在特定情况下的通信,如:电话呼入时、网络可用时。...

2018-01-28 09:52:41 500 2

原创 Android进阶之深入理解网络编程

1 详解TCP1.1 TCP是什么?  TCP是Tranfer Control Protocol的简称,TCP协议是一种面向连接的、可靠的、基于字节流的运输层通信协议。通过TCP协议传输,得到的是一个顺序的无差错的数据流。发送方和接收方的成对的两个socket之间必须建立连接,以便在TCP协议的基础上进行通信,当一个socket(通常都是server socket)等待建立连接时,另一...

2018-01-23 23:55:07 2487 1

原创 Android源码分析之RxJava框架

1 基础版RxJava框架  RxJava是一个非常牛逼的框架,用法很简单,但内部实现复杂,代码逻辑绕。既然用拆轮子的方式来分析源码比较难啃,我们换种方式,以造轮子的方式,将源码中与性能、兼容性、扩展性有关的代码剔除,留下核心代码带大家揭秘RxJava的实现原理。2 什么是响应式编程  RxJava是响应式编程–Reactive Programming在Java中的一种实现。那啥叫响应呢?你烧水呢,

2018-01-04 00:31:19 441

转载 结构型设计模式之代理模式

1 代理模式概念1.1 介绍  代理模式(Proxy Pattern)是面向对象中一种非常常见的设计模式。其实,不单是在软件开发领域,在我们的日常生活中对于代理也时常可见。比如:房东要将自家的房租出售,于是到房地产中介公司找一个代理,由他来帮自己完成销售房屋,签订合同等等事宜。在此,就以该生活场景为蓝本介绍Java的代理模式。一般而言,代理技术可分为:静态代理和动态代理;我们先来看静态代理。1.2

2017-12-14 21:22:18 259 1

原创 数据结构与算法之LinkedList源码分析

1 LinkedList的基本结构  链表就和链子一样,每一环都要连接着后边的一环和前边的一环,这样,当我们需要找这根链子的某一环的时候,只要我们能找到链子的任意一环,都可以找到我们需要的那一环。如下图:   LinkedList在jdk1.6中的结构:   LinkedList在jdk1.7中的结构: 图片来源于:Java进阶之—-LinkedList源码分析   对比一下,知道区

2017-12-07 00:34:20 682

原创 算法刻意练习之Map系列

1 概述 图片来源于:Java集合框架.mdJava Collection Framework源码剖析2 Collection2.1 List(1)概念 AbstractList 是一个抽象类,它实现List接口并继承于 AbstractCollection 。对于“按顺序遍历访问元素”的需求,使用List的Iterator 即可以做到,抽象类Abstract...

2017-12-07 00:18:37 965

原创 Android源码分析之Glide源码分析&基础版ImageLoader框架

1 Glide源码分析  Glide是一款由Bump Technologies开发的图片加载框架,使得我们可以在Android平台上以极度简单的方式加载和展示图片。本博客基于Glide 3.7.0版本来进行讲解,这个版本的Glide相当成熟和稳定。1.1 Glide框架   简单的讲就是Glide收到加载及显示资源的任务,创建Request并将它交给RequestManager,...

2017-11-25 16:27:18 598 2

原创 Android源码分析之仿OrmLite数据库框架

1 介绍  Ormlite,英文全称是Object Relational Mapping,意思是对象关系映射。前面写过使用的文章,Android进阶之数据库框架ormlite使用。我们也参考着写一个轻量级的数据库访问框架。2 使用方法(1)在 gradle 中引入:compile 'com.guan.codelibs:lightsqlite:1.0.0'(2)UserB

2017-10-21 18:21:29 476

原创 Java进阶之反射

1 什么是反射  反射(Reflection)是Java 程序开发语言的特征之一,它允许运行中的 Java 程序获取自身的信息,并且可以操作类或对象的内部属性。   一句话总结:反射就是把Java类中的各种成分通过java的反射API映射成相应的Java类,得到这些类以后就可以对其进行使用。比如方法,构造方法,成员变量,类型,包等。   反射的核心是JVM在运行时才动态加载类或调用方法/访问属性

2017-10-21 16:58:56 461

原创 Java进阶之深入理解注解(Annotation)

1 介绍  Annotation(注解)就是Java提供了一种元程序中的元素关联任何信息和着任何元数据(metadata)的途径和方法。Annotion(注解)是一个接口,程序可以通过反射来获取指定程序元素的Annotion对象,然后通过Annotion对象来获取注解里面的元数据。   2 注解分类  注解的语法比较简单,除了@符的使用之外,它基本与Java固有语法一致。JavaSE5内置了三

2017-10-21 15:40:59 1503

原创 Android源码分析之理解Volley

0 参考链接volley官网手撕 Volley Volley全方位解析,带你从源码的角度彻底理解Android Volley完全解析(四),带你从源码的角度理解VolleyAndroid 面试之常用开源库HTTP权威指南笔记Java并发编程:阻塞队列1 前言  Volley 是 Google 推出的轻量级 Android 异步网络请求框架和图片加载框架。在 ...

2017-09-23 00:18:37 1145

原创 Gradle之通过配置productFlavors实现多版本差异化打包

1 基础知识1.1 productFlavors  gradle中有一个功能叫做变体「productflavors」,这是来为APP设置不同的打包配置,以实现多渠道打包的一种方案。android { productFlavors { baidu { } _360 { } yingyongbao { }

2017-08-30 13:38:31 5203 1

原创 Gradle之将Android项目开源到JCenter

1 前沿  在开发中我们都会用到无私的程序员分享的开源项目,Androidstudio中使用开源也很方便 。例如家喻户晓的Rxjava,只需要一句话compile ‘io.reactivex:rxjava:1.1.6’,就可以添加到项目中,时间久了,是不是自己也想试试开源一下自己的成果,给大家用用,或者成就感。   这时候有两种发布方式,一种是gradle-bintray-plugin,一种bin

2017-08-22 00:36:24 601 1

原创 Android基础之创建快捷方式

1 权限<!-- 添加快捷方式 --> <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" /> <!-- 移除快捷方式 --> <uses-permission android:name="com.android.launcher.permission.UNINST

2017-08-14 23:28:07 7190 2

原创 Android进阶之数据库框架ormlite使用

1 ormlite是什么?  官网www.ormlite.com,它的英文全称是Object Relational Mapping,意思是对象关系映射,在JavaEE开发就有一个类似的数据库映射框架——Hibernate。简单来说,就是我们定义一个实体类,利用这个框架,它可以帮我们把这个实体映射到我们的数据库中(SQLite),数据中的字段就是我们定义实体的成员变量。2 为什么要用ormlite?2

2017-07-30 22:31:17 806 1

原创 工具使用--新建项目添加到git上步骤

1 步骤(1)在Git网站上创建项目git库(2)本地使用Android studio新建项目(3)切换到本地项目文件夹下cd GitTestDemo(4)初始化gitgit init(5)添加所有git add .(6)commit提交git commit -m "first commit"(7)添加一个新的远程版本仓库origingit remote add origin git@git.osc

2017-07-28 23:01:53 646

RxJava框架时序图-线程切换

RxJava框架时序图-线程切换,RxJava框架时序图-线程切换

2018-01-04

RxJava框架时序图-map操作符

RxJava框架时序图-map操作符,RxJava框架时序图-map操作符

2018-01-04

RxJava框架时序图-基本的RxJava例子

RxJava框架时序图-基本的RxJava例子, RxJava框架时序图-基本的RxJava例子

2018-01-04

Glide框架时序图-加载缓存图片

Glide框架时序图-加载缓存图片,Glide框架时序图-加载缓存图片。

2017-12-21

Glide框架时序图-加载网络图片

Glide框架时序图-加载网络图片,Glide框架时序图-加载网络图片。

2017-12-21

imageloader框架时序图分析

imageloader框架时序图分析,imageloader框架时序图分析

2017-11-25

JobScheduler

JobScheduler 例子

2016-12-06

ttf字体文件

TTF字体文件,包括:微软雅黑、谐体、线体等等

2016-07-22

空空如也

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

TA关注的人

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