[Android] 如何计算View的Size

2018-01-31
阅读 4 分钟
4k
** 注:本文参考链接How Android caculates view size 本文例子如下所示: {代码...} 过程 计算view大小的过程可以分为以下几个步骤: 确定view想要的size(LayoutParams) 确定parent view的情况(MeasureSpec) 在parent view的限制下,根据view的LayoutParams,确定view的大小 参数 LayoutParams LayoutParams用于view...

[Gradle] 如何在android项目中对纯Java module启用proguard

2017-07-25
阅读 3 分钟
7k
如何在android项目中对纯Java module使用release/debug build并启用proguard?这里提供一种方法,尽管不是很“好看”,但是可用。

[vscode] markdown_index 可以为你的markdown标题添加序号的插件

2017-07-25
阅读 1 分钟
5.2k
注:重复运行命令可以自动更新序号。注:仅对“#”标记的标题等级有效。注:在vscode market搜索“markdown-index”即可安装

[Android] 如何在 Activity 或者 Fragment 的生命周期结束时停止订阅 Observable

2017-07-25
阅读 2 分钟
4.2k
NavUtil 利用 NavUtil,你可以在 Activity 或 Fragment 的生命周期发生变化时,停止订阅你的 Observable。 Usage 在Activity 中,为你的 Observable 应用 compose 操作符,如下所示: {代码...} 在 Fragment 中的用法如下所示: {代码...} 目前支持的生命周期事件如下所示: {代码...} Gradle {代码...}

[Android] 在xml中“直接”使用px的小技巧和工具

2016-09-08
阅读 10 分钟
4.7k
在项目开发中,UI给过来的设计图上的尺寸标识,一般以px(像素)为单位。Android工程师需根据设计图的尺寸将px换成dp,填到layout.xml中。

[Android] PacketParser 二进制协议转换工具

2016-08-27
阅读 4 分钟
3.2k
这个工具通过自动生成解析类,实现了字节数组和对象之间的转换。 1. 0.40更新 版本0.40发布,更新内容如下所示: 支持继承 支持对象作为字段 支持条件解析字段 支持忽略字段 支持对象List 使用0.40版本,你可以做到: 以TLV格式的数据为例,首先定义一个基类: {代码...} 再定义一个普通的TLV类: {代码...} 对于任意一...

[Android] Dagger2 入门 2

2016-08-24
阅读 9 分钟
2.7k
如上面例子所示,如果要求D对象为单例,可以通过@Singleton注解来实现。首先我们需要在依赖图中声明对象是单例的: {代码...} DComponent接口也需要声明: {代码...} 如此,当我们注入D对象时,可保证每次注入的是同一个D对象: {代码...}

[Android] Dagger2 入门 1

2016-08-20
阅读 6 分钟
2.7k
这篇文章主要谈一下本人在学习Dagger2的心得,如有错漏,敬请谅解。 什么是依赖注入 依赖注入就是把下面这样的代码: {代码...} {代码...} 变成: {代码...} {代码...} 这种把对象之间的依赖生成的责任交给外界的做法,叫做依赖注入。 如何更方便地进行依赖注入 我们有类和它们之间的依赖关系,便很自然地会用图来表示这...

[Android] 仿小米空气净化器首页旋转UI

2016-05-23
阅读 1 分钟
4.2k
效果图如下: 模仿并实现了小米空气净化器的主页旋转UI,动画效果比小米的流畅。 地址:[链接]

[Android] IntentInjector

2016-05-23
阅读 2 分钟
2.2k
做app的时候,经常遇到这样的需求:将数据放置在Intent中,再通过startActivity方法传给下一个Activity。常用写法如下所示:

[Android] Otto源码简析

2015-11-11
阅读 17 分钟
6.2k
默认参数为enforcer = ThreadEnforcer.MAIN,identifier = DEFAULT_IDENTIFIER,handlerFinder = HandlerFinder.ANNOTATED。我们来看看这些参数是什么意思。

[Android] Handler源码解析 (Java层)

2015-10-23
阅读 13 分钟
5.1k
之前写过一篇文章,概述了Android应用程序消息处理机制。本文在此文基础上,在源码级别上展开进行概述 简单用例 Handler的使用方法如下所示: {代码...} 或者: {代码...} 又或者: {代码...} 源码解析 首先看其构造函数: {代码...} 由此引入了两个关键对象Looper和MessageQueue。 先看 mLooper = Looper.myLooper(); 这...

Android Volley库源码简析(Image Request部分)

2015-09-19
阅读 13 分钟
6.5k
使用的具体步骤见注释。可以看出image请求与普通http请求发送流程是一样的,只是Request接口的实现不同,其中最重要的是ImageRequest实现的parseNetworkResponse(NetworkResponse response)方法。此方法实现了从data到bitmap的转换。

Android Volley库源码简析(HTTP Request部分)

2015-09-18
阅读 25 分钟
5.7k
本文仅对Volley中关于Http Request部分的一些简单用例做解析 源码目录树 首先,用脚本生成了该项目源码的目录树: {代码...} 可以看出,Volley源码放置得较为杂乱,不同功能模块的类并没有归到不同的包中。相比之下UIL的源码结构较为规范和合理。 从常用case入手,推断其项目架构 官网上给出的最简单的使用例子如下所示...

Universal Image Loader源码浅析

2015-09-17
阅读 24 分钟
5.4k
本文仅对UIL中一些简单的用例做解析 画出源码目录树 首先,用脚本生成了该项目源码的目录树,然后大致浏览一下文件内容,猜测其作用: {代码...} 从常用case入手,推断其项目架构 官网上给出的最简单的使用例子如下所示: {代码...} 下面一步步进行分析。 ImageLoader 看到 ImageLoader.getInstance()这一句,应该能马上...

BroadcastReceiver学习笔记

2015-09-14
阅读 9 分钟
2.3k
调用ContextImpl的registerReceiverInternal方法, 由LoadedApk类将context、receiver、scheduler(receiver所在进程的handler)等包装成ReceiverDispatcher类。并将其内部类IIntentReceiver返回,传给ActivityManagerService进行注册。

Zygote和System进程的启动过程

2015-07-12
阅读 10 分钟
6.5k
init脚本的启动 {代码...} linuz内核加载完成后,运行init.rc脚本: {代码...} 这里要注意两点: /system/bin/app_process Zygote服务启动的进程名 --start-system-server 表明Zygote启动完成之后,要启动System进程。 socket zygote stream 666 在Zygote启动时,创建一个权限为666的socket。此socket用来请求Zygote创建...

Android应用程序消息处理机制

2015-07-12
阅读 9 分钟
7.8k
Android的消息处理机制主要分为四个部分: 创建消息队列 消息循环 消息发送 消息处理 主要涉及三个类: MessageQueue Looper Handler Android应用程序每启动一个线程,都为其创建一个消息队列,然后进入到一个无限循环之中。然后不断检查队列中是否有新消息需要处理。如果没有,线程就会进入睡眠状态,反之会对消息进行...

Binder进程间通讯学习笔记 [C++层及驱动层]

2015-07-12
阅读 9 分钟
5.6k
binder_open()打开binder设备文件 2.1 初始化binder_proc结构体 2.2 将其加入到全局hash队列binder_procs中 2.3 创建/proc/binder/proc/

Binder进程间通讯学习笔记 [Java层]

2015-07-12
阅读 14 分钟
5.4k
通常来说我们只跟ServiceManager打交道。对ServiceManager的调用都会转发给其内部成员sServiceManager(ServiceManagerNative对象)。

[翻译] Bluedroid架构简介

2015-07-12
阅读 5 分钟
16k
Bluetooth app运行于Java层,并通过JNI和协议栈的接口(stack’s Interface Layer,BTIF)进行如下交互:

[读书笔记]C语言函数调用过程

2015-07-12
阅读 6 分钟
3.9k
*** 本文是《老码识途》第一章的读书笔记 *** 函数调用 例子代码如下所示: {代码...} 下面分析一下 Add函数的调用过程。 首先断点在z = Add(1, 2);处, 反汇编如下所示: {代码...} 首先压入参数1和2: {代码...} 通过观察ESP可以看到参数从右到左依次入栈,ESP往低内存方向移动8字节: {代码...} 然后执行: {代码...}...