自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(25)
  • 收藏
  • 关注

原创 博客迁移至简书

简书地址: https://www.jianshu.com/u/170a636eeb75 以后基本都在简书平台上更新博客啦, 后续会陆续更新相关文章!

2019-03-08 10:14:57 452

原创 自定义实现FlowLayout布局

大家来看这样一个需求,你需要设计一个container,实现内部控件自动换行。即里面的控件能够根据长度来判断当前行是否容得下它,进而决定是否转到下一行显示。效果图如下:在上图中,所有的黑色部分是FlowLayout控件,明显可以看出,内部的每个TextView控件,可以根据大小自动排列。 现在我就要通过所学的measure和layout知识自己实现一个FlowLayout。源码如下实现如下:...

2019-04-01 13:53:07 587

原创 揭开Flutter工程编译的面纱(Android篇)

0 、引言本文主要对Flutter工程编译时如何把Flutter生成的产物打包进入Android工程中进行分析。在Flutter工中打包过程中涉及到了local.properties、settings.gradle、build.gradle、flutter.gradle这几个脚本文件的参与,与传统的Android工程相比这几个脚本文件中的内容也不相同,接下来我们通过一层层解析,解开Flutter...

2019-03-05 14:30:15 7234

原创 Android-内存映射mmap

一、引言说到内存映射函数mmap大家可能觉得陌生,其实Android中的Binder机制就是mmap来实现的。不仅如此,微信的MMKV key-value组件、美团的 Logan的日志组件 都是基于mmap来实现的。mmap强大的地方在于通过内存映射直接对文件进行读写,减少了对数据的拷贝次数,大大的提高了IO读写的效率。二、Linux文件系统由于Android是基于Linux系统,因此在介绍...

2019-02-01 16:48:54 10980 2

原创 K路归并排序与败者树

一、大文件的排序问题在我们日常开发中有时候会遇到这样一个问题,有一个文件大小为10GB,现在要为里面的数据进行排序,而计算机的内存只有1GB,如何对这10GB的数据进行排序呢?由于内存空间只有1GB我们无法一次性读取所有的文件来进行排序,因此需要借助外部排序来解决。外部排序的思路很简单,它采用了** 一种" 排序-归并 " **的策略。大概步骤如下:1、把10GB文件大小分为10份,每一份1...

2018-12-10 11:07:49 11519 3

原创 Java动态代理与在Android的应用

一、前言1.1、什么是代理?大道理上讲代理是一种软件设计模式,目的地希望能做到代码重用。具体上讲,代理这种设计模式是通过不直接访问被代理对象的方式,而访问被代理对象的方法。这个就好比 A---->B—>C 这种模式。A可以不通过直接与C对话的情况下,而通过B与其产生间接对话。Java动态代理之所以叫做动态,因为它能避免传统代理模式实现中人工一个一个的将java函数转发过去,而是能...

2018-11-03 18:21:37 6483 1

原创 动手实现Android源码(AOSP)的下载、编译、运行、导入、调试

这几天为了搞Android源码费了不少功夫,也遇到了不少坑,在此记录作为日后参考。Android源码的编译运行只支持Linux和Mac系统,至于Windows系统只能绕道了,或是在虚拟机上安装Linux系统也是可以的。本人的系统是macOS 10.12.3,Xcode的版本是7.1。官方教程地址为:https://source.android.com/source/index.html 一、搭建Ma

2017-03-05 14:08:39 7746 1

原创 由内部类引发的Android内存泄漏的一些思考

在Java内部类详解的一文中,我们对Java内部类进行了分析,其中有一点引人深思:普通内部类和匿名内部类都会持有外部类的引用,而如果外部类也持有内部类(匿名内部类)的引用,这不就造成相互引用了吗? 面对这种情况GC如何处理,如何释放这两个对象资源? 要弄清GC如何回收相互引用的对象,那就必须了解JVM如何对存活的对象进行判定的。存活对象的判定当一个对象不会再被使用时,我们会说这对象已经死亡。对象何时

2017-02-03 17:31:11 1567 2

原创 Android 触摸模式(Touch Mode)

Android 触摸模式(Touch Mode)标签(空格分隔): Android什么是焦点?在非触屏手机时代或电脑上,我们通常需要用键盘、 鼠标、轨迹球(trackball)与界面进行交互,当交互的时候必须使目标控件获得焦点(比如高亮起来),这样用户才会注意到是什么控件接受输入。而如果是在触屏时代,用户可以直接用手指点击控件,这个时候就没必要将目标高亮了(即获取焦点)。这也就是接下来我们要讲的触摸

2016-12-17 16:00:23 5787 2

原创 关于创建Android Library所需要知道的一切

关于创建Android Library所需要知道的一切Android 库(Library)在结构上与 Android 应用模块相同。应用模块所可以包含的东西,在库中都允许存在,包括代码文件、资源文件和manifest文件等。应用模块编译后生成的是一个apk文件,可以直接在设备上运行,但是,库模块编译后生成的是一个Android Archive文件,简称AAR。AAR文件无法像apk文件一样直接在设备

2016-12-08 20:03:03 7823 7

原创 Java内部类详解

一、什么是内部类什么是内部类? 可以将一个类的定义放在另一个类的定义内部,这就是内部类。内部类是Java中一种非常有用的特性,因为它允许你把一一些逻辑相关的类组织在一起,并控制位于内部类的可视性。内部类看起来就像一种代码的隐藏机制,因为它将类置于其他类的内部。但是内部类的作用不仅这些,内部类与外部类之间还可以互相通信;而且内部类可以让你写出的代码优雅清晰。内部类有两种情况:在类中定义一个类,这个内

2016-11-13 16:09:05 891

原创 利用APT实现Android编译时注解

一、APT概述我们在前面的java注解详解一文中已经讲过,可以在运行时利用反射机制运行处理注解。其实,我们还可以在编译时处理注解,这就是不得不说官方为我们提供的注解处理工具APT (Annotation Processing Tool )。APT用来在编译时期扫描处理源代码中的注解信息,我们可以根据注解信息生成一些文件,比如java文件。利用APT为我们生成的Java代码,实现冗余的代码功能,这样就

2016-10-05 19:00:57 4056 4

原创 Maven入门

什么是Maven?Maven是一个用于项目构建的工具,被认为是Ant的替代品或者继任者。事实上Maven的功能要远远超出Ant,它不仅仅提供编译的脚本,更是在整 个项目周期中提供测试,发布,文档生成等功能,并且有着独特的依赖性管理方法。它提供了三种功能:依赖的管理:仅仅通过jar包的几个属性,就能确定唯一的jar包,在指定的文件pom.xml中,只要写入这些依赖属性,就会自动下载并管理jar包。

2016-09-12 20:43:08 824

原创 Java注解详解

什么是注解  元数据(meta-data)是指用来描述数据的数据。更通俗一点,就是描述代码间关系,或者代码与其他资源(例如数据库表)之间内在联系的数据。对Struts来说就是struts-config.xml文件,对hibernate来说就是hbm文件。但是现有的以xml或其它方式存在的元数据文件都有一些不便之处。第一、与被描述的文件分离,不利于一致性的维护,第二、所有这样文件都是ASCII文件,没

2016-09-06 18:08:24 2626

原创 Java中Class对象详解

Class类简介  在java世界里,一切皆对象。从某种意义上来说,java有两种对象:实例对象和Class对象。每个类的运行时的类型信息就是用Class对象表示的。它包含了与类有关的信息。其实我们的实例对象就通过Class对象来创建的。Java使用Class对象执行其RTTI(运行时类型识别,Run-Time Type Identification),多态是基于RTTI实现的。  每一个类都有一个

2016-08-28 12:33:52 19210 13

转载 设计模式-单例模式

概念单例模式,又称单件模式或者单子模式,指的是一个类只有一个实例,并且提供一个全局访问点。实现思路在单例的类中设置一个private静态变量sInstance,sInstance类型为当前类,用来持有单例唯一的实例。将(无参数)构造器设置为private,避免外部使用new构造多个实例。提供一个public的静态方法,如getInstance,用来返回该类的唯一实例sInstance。其中上

2016-08-19 15:40:38 466

原创 java集合大家族之迭代器

引言任何容器,都必须有某种方式可以插入元素并将它们再次取回。对于List容器,add()是插入元素的方法之一,而get()是取出元素的方法之一。要使用容器,就必须对容器的确切类型编程,如果原本是对着List编码,但后来发现如果能够把形同的代码应用于Set,将会显得非常方便。Iterator迭代器Iterator(也是一种设计模式)的概念就可以用于达成此目的。迭代器是一个对象,它的工作是遍历并选择容器

2016-08-15 14:41:06 531

原创 java集合大家族之总结

Collection和Map都可以在你向其中添加更多的元素时,自动调整其尺寸。容器不能持有基本类型,当你尝试向容器中加入一个基本类型时会自动包装。如果要进行大量的随机访问,就是有ArrayList。如果要经常从表中间插入或删除元素,则应该使用LinkedList。对于ArrayList因为有数组支撑,所以无论列表的大小如何,访问元素的速度都是一致的。但是对于插入操作而言,如果插入大量的元素,就必

2016-08-15 14:03:45 775

原创 java集合大家族之Map

MapMap也被称为映射表(关联数组),使得你可以用键来查找对象,键所关联的对象被称为值,因此你可以使用键来找值,用对象来查找对象。Map保存的键不重复,如果有相同的键被加入,那么原来的值将被加入的值覆盖。键必须是唯一的,而值可以有重复。标准的java类库中包含了Map的几种基本实现,包括:HashMap、TreeMap、LinkedHashMap、WeakHashMap、ConcurrentHas

2016-08-15 13:55:19 1138

原创 java集合大家族之Collection(List、Queue、Set)

集合简介如果你想保存一组对象,数组是个很好的选择,但是数组具有固定的尺寸。在一般的情况中,你在写程序时并不知道将需要多个对象,或者是否需要更复杂的方式来存储对象,因此数组尺寸固定这一限制显得过于受限制了。java类库中提供了一套相当完整的容器类来解决这个问题,其中基本的类型是List、Set、Queue和Map,这些对象类型也称为集合类。java容器类都可以自动调整自己的尺寸。因此,与数组不同,在编

2016-08-15 11:28:41 1842

原创 浅谈java中final数据

引言在说说final之前,我们先了解下类被加载到内存中所需要的几个步骤,一个类被加载到内存中需要经过如下几个阶段:编译: java文件必须编译成Class文件(也称为字节码文件)才可以被JVM识别,JVM并不关心Class的来源是什么语言,只要它符合一定的结构,就可以在Java中运行。装载:查找和导入必要的Class文件,在Java虚拟机执行过程中,只有他需要一个类的时候,才会调用类加载器来加

2016-08-15 11:03:51 1312

原创 在android上使用Lambda

android上使用Lamda表达式

2016-08-15 10:30:37 1090

原创 深入理解android事件分发

引言在Android开发中,经常要重写View的onTouchEvent方法来接收屏幕对View的点击事件,那这个点击事件是从哪里来的呢?整个点击事件又是怎么分发的呢? 我们在下面的内容中为大家解开谜团。 我把要讲的内容分为三部分: 1. 分发事件的由来 2. ViewGroup中事件的分发 3. View中事件的处理1.分发事件的由来说到Android的输入设备,

2016-03-23 17:38:00 1129

原创 深入理解Activty的启动

引言我们知道Activity是用来的显示界面的地方,但是Activity是如何启动的?Activity如何与AMS建立联系?Activity跟Window、DecorView、ViewRootImpl又有怎样的联系? 我们设置的布局如何与Activity建立联系?这些问题都困扰着我们,为了看清Activity的本质我们从源码出发,从根本上解决以上的问题。下面的源码是基于6.0.1进行分析,推荐一个在

2016-03-18 17:53:19 823

原创 理解Android之ThreadLocal

引言我们知道在android上,主要利用了Handle实现了线程之间的消息通信。在Handle消息机制中有个很重要的类ThreadLocal,理解ThreadLocal有助于我们更深入的理解Handle通信机制。android上的ThreadLocal跟java jdk上的实现方式有点不一样,但是它们的功能都是一致的,下面我会用android上的ThreadLocal跟大家进行分析。

2016-03-05 19:03:30 556

空空如也

空空如也

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

TA关注的人

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