- 博客(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
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人