01 2017 档案
摘要:TODO: 待写 消息处理管道 一个App看作是系统,外部输入消息需要经过一系列处理,涉及不同接收者。消息处理的跟踪(Trace)和结果的保存。 比如设计一个用来接收服务器推送消息的处理框架? 以Android中处理InputEvent的设计作为借鉴。 案例 android.view.ViewRoo
阅读全文
摘要:对象复用 使用链表作为pool来保存要复用的对象。 pool字段 obtain recycle 案例1 android.os.Message 案例2 android.view.ViewRootImpl 案例3 android.view.MotionEvent java private static
阅读全文
摘要:NOTE: 笔记,碎片式内容 控件 App界面的开主要就是使用View,或者称为控件。View既绘制内容又响应输入,输入事件主要就是触摸事件。 ViewTree 控件基类为View,而ViewGroup是其子类。ViewGroup可以包含其它View作为其child。任何一个ViewGroup及其所
阅读全文
摘要:内容简述 类似Binder机制,MessageQueue、Looper也有底层的C++实现,涉及文件管道和驱动等。 以下仅从Java层的Looper、Handler和MessageQueue等相关类型的源码来分析线程消息处理的机制。 MessageQueue的创建 Looper用来创建和启动消息队列
阅读全文
摘要:简述 Android设备启动过程中,先是Linux内核加载完,接着Android中的第一个进程init启动,它会启动一些需要开机启动的进程。 Zygote就是进程init启动起来的。Android中所有应用程序进程,以及运行系统关键服务的System进程都是由Zygote创建的。它通过复制自身的形式
阅读全文
摘要:Handler Thread HandlerThread
阅读全文
摘要:概述 一个Activity允许用户完成一些操作,甚至,Android中设计Activity为组件的形式,这样,多个Activity——甚至是其它App的Activity可以一起完成一项任务。 Task 多个Activity一起完成一项工作时,它们的集合被称作一个Task。 A task is a c
阅读全文
摘要:简介 Android 3.0 (API level 11)引入了属性动画系统,它是一个完善的框架,可以用来对几乎任何对象进行动画。只需要指定要动画的对象属性,动画时长,属性值区间等,无论对像是否在屏幕中显示与否,都可以随时间改变其属性值达到动画效果。 属性动画支持以下特性: Duration:动画持
阅读全文
摘要:线程简述 进程是一个程序的一个运行中的实例,os为进程分配内存、IO等资源。进程拥有若干个(至少一个)线程来获得CPU执行其中的指令,线程使用进程的资源。 使用 线程的典型使用流程如下: 1. 实现Runnable接口,具体的执行逻辑。 2. 创建一个Thread对象,Runable作为它的任务。
阅读全文
摘要:简述:transitions framework 下面翻译transition为“过渡”,强调动画过程的含义,不过更多时候使用transition单词本身。 Android 4.4.2 (API level 19) 引入了 ,它用来在两个view hierarchies(就是ViewGroup实例)
阅读全文
摘要:aar aar 文件是android 类库项目的输出文件,其中可以包含普通的.class,清单,以及android项目特有的资源文件。 使用方式 1. 将.aar文件放在在自己项目的libs目录下 2. 在gradle中做如下配置: 之后就可以在代码中import其中的类型,进行使用。
阅读全文
摘要:一些约定 java命令行程序 算法的学习和语言无关,下面使用一个 来作为实例程序。 一个算法一个类 排序算法使用一个方法就可以表示,不需要是一个对象。但为了让各种排序算法的表示相互独立,接下来分别为它们定义不同的类型,并提供一些工具类来产生随机数序列,打印数字序列,对数列进行校验等。 以整数序列升序
阅读全文
摘要:Android项目中gradle的使用
阅读全文
摘要:Android插件框架DroidPlugin解析
阅读全文
摘要:笔记:butterknife的工作原理
阅读全文
摘要:笔记:butterknife的基本使用
阅读全文
摘要:效果图 app中下面这样的控件很常见,像默认的TabHost表现上不够灵活,下面就简单写一个可以结合ViewPager切换内容显示,提供底部“滑动条”指示所显示页签的效果。 ![效果图][show1] ![效果图][show2] 这里控件应对的场景是“水平等长度”的若干标题,标题不可滚动。 控件设计
阅读全文
摘要:广播概述 广播用来在组件之间传递消息,可以是同进程或跨进程。 广播机制是基于发布订阅的事件驱动模型,使用上比Binder通信(跨进程接口回调)更低耦合、简单。 ActivityManagerService(简称AMS)作为广播消息发布订阅的注册中心,广播接收器(Broadcast Receiver,
阅读全文
摘要:NOTE 超简化版 本文内容是对老罗《Android源码情景分析》Service启动章节的笔记。 Service的创建特点 作为四大组件之一,Service的创建不是普通对象那样new出来的,而是用startService()、bindService()这样的方式启动。和Activity一样,它需要
阅读全文
摘要:Activity的创建特点 作为四大组件之一的Activity,它不像普通java对像那样,可以new出来,然后去使用。而是调用 startActivity()这样的方式启动。那么Android系统是如何创建并启动Activity的呢?本文就来 一探究竟。 NOTE:本文内容就是对老罗《Androi
阅读全文
摘要:设计模式:面向对象设计原则和模式分类
阅读全文
摘要:模板方法 使用基类定义整体步骤,即若干方法的调用过程,将一些可变的步骤由子类去重写。这样就可以利用多态在不改变操作的整体结构下定制一些特殊细节。 代码解释 可以联想在线电子邮件和普通邮递的区别。 基类定义操作过程的整体结构: 子类根据需要定制某些步骤: 案例 Activity Activity类定义
阅读全文
摘要:抽象工厂概念 将工厂定义为接口,它提供创建一系列相关对象的方法。 代码示例 接口Car、Ship是要得到的抽象产品类型,BigCar、BigShip、MiniCar、MiniShip是可能的不同具体的产品,有可能扩展。 ProductFactory定义了不同类型Car、Ship的获取方式。 Prod
阅读全文
摘要:简单工厂概念 又叫做静态工厂方法(Static Factory Method)模式,由一个工厂对象决定创建出哪一种产品类的实例。 代码示例 Car是要得到的目标类型,BigCar、MiniCar可能的不同具体的产品,有可能扩展。 CarFactory定义了不同品牌Car的获取方式。 客户端代码使用C
阅读全文
摘要:简介 建造者模式(Builder),将一个复杂对象的表示和它的构建分离,这样同样的构造过程可以创建出不同的对象状态。 类图 下面的Product是要创建的对象的目标类型,产品。 Builder 创建一个Product对象涉及的操作的抽象接口,定义了Product各个部分的创建方法。 Director
阅读全文
摘要:简介 单例模式使得一个类的实例是唯一的,外部对它的访问都针对同一个对象。 单例模式的使用可以是业务上的原因,比如一个User对象需要全局唯一,或者是性能上的考虑,避免创建代价较高的对象反复实例化。 实现方式 饿汉式:性能不是问题时,且对象一定需要被实例化,线程安全 双重锁定 线程安全,较高的性能,无
阅读全文
摘要:TODO: 待修正 Binder简介 Binder是android系统中实现的一种高效的IPC机制,平常接触到的各种XxxManager,以及绑定Service时都在使用它进行跨进程操作。 它的实现基于OpenBinder项目,属于核心库。framework层的Binder通信用到的相关java类型
阅读全文