Android

Android

[第27期]Android周报

文章/教程 1. Android MVPR 架构模式 本文以 Google 的 IOSched 为例,分析了传统的 MVP 模式存在什么问题。IOSched 以前都是作为一个学习的典范来推荐,本文作者却对本项目的架构提出一些质疑和思考,后续的文章将会提出他得解决方案,这是非常好的极客精神。 2. Android 性能优化典范(三) 这是前段时间 Google 推出 Android 性能优化系列视频的第三季的文字总结,文章简洁清晰,干货很多。前两季的总结,也在作者的博客中能找到,感谢@胡凯me。 3. 逃离 adapter 的地狱-针对多个 View type 的组合实现方案 本文通过实例,讲述了你是怎么在不知不觉中陷入 Adapter 地狱的,如果你的 RecyclerView 要显示很多种类型的 Item,

By Race604

Android

[第26期]Android周报

文章/教程 1. Android Studio 使用 Gradle 打包 Jar 使用 AS 打包 Jar 并不是很方便,本文给出了一个使用 Gradle 自动打包 Jar 并混淆的解决方案。 2. 一个优秀的 Android 应用从建项目开始 本文介绍了开始一个新的 Android 项目可以遵循的一些基本规则,有一个好的开始,后面开发就会更顺利。 3. 探究 android:largeHeap 本文介绍了 Android 4.0 对 Application 引入属性 android:largeHeap 是怎么回事,有什么作用以及使用的注意事项。 4. Android 平台免 Root 无侵入 AOP 框架

By Race604

Android

[第25期]Android周报

文章/教程 1. 使用Kotlin开发Android应用系列 看起来用 Kotlin 来做 Android 开发的时机越来越成熟。这是一个系列译文,从入门开始介绍怎么使用 Kotlin 来开发 Android 应用。系列文章(I):简介、(III):扩展函数和默认值、(IV):自定义视图和Android扩展。 2. [译]使用 Android Support Annotations 优化你的代码 使用 Android 的注解是一个非常酷的功能,特别是设计 API 的时候,可以极大的提高你的代码的可读性和在写代码的阶段就保证代码的健壮性。 3. LocalBroadcastManager 的实现原理 LocalBroadcastManager 为什么更加高效?来看源代码就清楚了,原理原来这么简单和巧妙。 4. Android HandlerThread 完全解析 HandlerThread 可以提供一个 Looper,

By Race604

Android

BLE 广播数据解析

从上一篇 GATT Profile 简介中提到过,BLE 设备工作的第一步就是向外广播数据。广播数据中带有设备相关的信息。本文主要说一下 BLE 的广播中的数据的规范以及广播包的解析。 广播模式 BLE 中有两种角色 Central 和 Peripheral,也就是中心设备和外围设备。中心设备可以主动连接外围设备,外围设备发送广播或者被中心设备连接。外围通过广播被中心设备发现,广播中带有外围设备自身的相关信息。 广播包有两种:广播包(Advertising Data)和响应包(Scan Response),其中广播包是每个设备必须广播的,而响应包是可选的。 数据包的格式如下图所示(图片来自官方 Spec): 每个包都是 31 字节,数据包中分为有效数据(significant)和无效数据(non-significant)两部分。 * 有效数据部分:包含若干个广播数据单元,称为 AD Structure。如图中所示,AD Structure 的组成是:

By Race604

Android

[第24期]Android周报

文章/教程 1. Gradle Tips 这是一个系列译文,包含(一)、(二)、(三)。文章清晰易懂,是非常好的 Gradle 入门教程。(by @hi大头鬼hi) 2. Material Design:扁而不平 关于 Material Design 的小品文,表面上讨论 Material Design 到底扁不扁,实际上是阐述它的设计哲学。 3. CoordinatorLayout 与滚动的处理 CoordinatorLayout 是 Design Support Library 中最重要与最难的部分,它支撑了很多 Material Design 效果的实现。正因为它功能强大,实现也非常巧妙。本文讲解了 CoordinatorLayout 的使用方法和工作原理。 4. Android UI

By Race604

Android

GATT Profile 简介

网上关于讲解 BLE 的内容比较少,看到这篇文章写的非常详细 Introduction to Bluetooth Low Energy,作为 BLE 的入门时介绍是非常合适的。本文主要翻译了一下这篇文章。 一、 引言 现在低功耗蓝牙(BLE)连接都是建立在 GATT (Generic Attribute Profile) 协议之上。GATT 是一个在蓝牙连接之上的发送和接收很短的数据段的通用规范,这些很短的数据段被称为属性(Attribute)。 二、 GAP 详细介绍 GATT 之前,需要了解 GAP(Generic Access Profile),它在用来控制设备连接和广播。GAP 使你的设备被其他设备可见,并决定了你的设备是否可以或者怎样与合同设备进行交互。例如 Beacon 设备就只是向外广播,不支持连接,小米手环就等设备就可以与中心设备连接。 1. 设备角色 GAP 给设备定义了若干角色,

By Race604

Android

[第23期]Android周报

文章/教程 1. Android 开发有哪些新技术出现? Android 社区新技术层出不穷,本文从开发工具到设计模式,再到 UI 设计总结了 Android 开发的新技术。 2. 如何高效学习 Android 动画? 动画是 APP 的点睛之笔,Android 提供很多动画 API,可以形成一个独立的动画系统。本文介绍了怎样去学习动画开发。 3. 关于 APK 瘦身值得分享的一些经验 本文介绍了 APK 是由什么组成的,从这里入手,分享了一些减小 APK 包大小的方法和经验。同时推荐我自己的一篇翻译摘要给 Apk 瘦身。 4. 避免 Android 中 Context 引起的内存泄露 Context 在 Android 中无处不在,处理不当就可能会引起内存泄露,

By Race604

Android

知乎回答-Android 开发有哪些新技术出现?

这里记录一下在知乎回答的《Android 开发有哪些新技术出现?》。知乎链接在这里。 原问题如下: Android 开发有哪些新技术出现?  可以从UI设计或者一些核心的算法之类的说起 这是我回答的原文: 第一次在知乎回答问题,感觉有些战战兢兢,在大神云集的地方,生怕有些东西说错,让大家笑话。 题主提的这个问题,相信很多开发者都有自己的话要说。Android 的发展确实太快了,每年的都有很多新东西出现,想要覆盖所有新东西感觉也不太可能,我这里主要说一下主要的 Android 的主要新技术发展,其实了解 Android 的发展趋势,可能对开发者更有帮助。 开发工具 1. Android Studio: Google 官方放弃 Eclipse 和 Android Studio 普及。AS 虽然不算新,但是对 Android Studio 这个软件的更新速度快的惊人,有大量的新功能发布。例如支持很多注解代码提示注解、Live code template、支持自动生成

By Race604

Android

[第22期]Android周报

文章/教程 1. Android APP 内存优化之图片优化 作者从实践经验中总结了一些优化 APP 内存的方法,特别是对大屏幕、多图片的应用这些方法都很有效。 2. Android Design Support Library 的代码实验 一篇非常详尽的 Android Design Support Library 的使用文章,有完整的工程,并且这个库中的各种坑也指出来了,你一定用的上。 3. MIUI 添加内存调试工具:查看进程中的 Bitmap 信息 Android 应用的内存消耗一直是工程师最头疼的事情,MIUI 系统提供了一个比较底层,诊断应用的 Bitmap 消耗内存的 工具,用这个工具可以查看特定进程中,当前 Bitmap 的使用情况。 4. Android 增强版百分比布局库 看到大家都很喜欢 Android 新发布的百分比布局,

By Race604

Android

Android GATT 连接过程源码分析

低功耗蓝牙(BLE)设备的通信基本协议是 GATT, 要操作 BLE 设备,第一步就是要连接设备,其实就是连接 BLE 设备上的 GATT service。 结合上一篇文章,我这里结合源码,分析一下 GATT 连接的流程,以及各个模块是怎么相互交互的。注意本文依据的是 Android 4.4 的源代码。 应用框架层 首先,一般应用层都是通过调用如下方法,来创建一个 GATT 连接的: mBluetoothGatt = device.connectGatt(this, false, mGattCallback); 这里调用了方法 connectGatt(),我们来看一下源码,代码在 /frameworks/base/core/java/android/bluetooth/BluetoothDevice.java: public BluetoothGatt

By Race604

Android

[第21期]Android周报

文章/教程 1. ViewOverlay 与 animation 介绍 本文简单介绍了 Android 4.3 引入新类 ViewOverlay 的特性,ViewOverlay 就是一个在普通的 View 之上的一个视图层,是用来做动画的绝佳的地方。 2. 手动实现布局过渡效果(Layout transition) 这是一个系列文章,介绍了怎么一步一步手动实现一个 Layout transition,包括(一)、(二)、(三)、(四) 顺便推荐一下本文的原文出自 Styling Android,此博客以写 Android 系列教程而出名,内容易懂、循序渐进,而且介绍的 Android 技术都是非常前沿,值得关注。 3. Kotlin 在 Android 工程中的应用 [Kotlin]

By Race604

Android

Android 的蓝牙简介

本文主要是翻译了 Google 的官方文档。 简介 Android 提供默认的蓝牙协议栈是 BlueDroid,分为两层:蓝牙嵌入式系统(BTE)和蓝牙应用层(BTA),BTE 层主要实现蓝牙的核心功能,BTA 层则主要负责和 Anroid 框架通信。 Android 4.2 之前,Google 一直应用的是 Linux 官方蓝牙协议栈,即知名老牌开源 项目 BlueZ。BlueZ 实际上是由高通公司在 2001 年 5 月基于 GPL 协议 release 的一个开源项目,该项目仅 release 一个月后就被 Linux 之父 Linux Torvalds 纳入了 Linux 内核,并做为

By Race604

Android

[第20期]Android周报

文章/教程 1. 美团 Android DEX 自动拆包及动态加载简介 一个多 DEX 打包实践。对于大型的 Android 项目是非常有必要的,可以参考一下这里的实现和可能遇到坑。 2. Android Studio 分模块自动化构建实战 使用 Gradle 自动化构建模块的一个实例。Gradle 构建非常灵活,配合一些自定义脚本,能够自动化干很多事情。 3. 一步一步教你实现 Periscope 点赞效果 有些动画看起来非常炫酷,但是具体实现起来,就会发现其实很简单,本本使用简单的接口来一步一步实现模拟 Periscope 的点赞效果。 4. Android 项目利用 Android Studio 和 Gradle 打包多版本 APK 再推荐一个使用 Gradle 脚本配置多版本的打包。正是因为用了 Gradle,让

By Race604

Android

[第19期]Android周报

文章/教程 1. Android 应用层 View 绘制流程与源码分析 通过分析源码详解了 View 的 measure, layout, draw 流程,对理解 Android 中最核心的 View 类有非常大的帮助。(@工匠若水) 2. Android Design Support Library 使用详解 Android 社区发生的大事就是最近开了 Google I/O 大会。大会给开发者的大礼就是发布了这个库, Material Design 很多特性都官方支持了,这篇文章就带你快速用上这些神器。 3. ViewStub、include、merge使用与源码分析 从源码角度分析布局中使用 include, ViewStub 和 merge 的方法,以及各自的原理和特点。文章比较浅显易懂。 4.

By Race604

Android

FlyRefresh——让人眼前一亮的下拉刷新

几天前在网上看到 @Zee Young 的一个下拉刷新的设计 Replace。如下图: 第一眼看到这个设计就觉得眼前一亮,在Dribble上获得了 1.7k 多的 like,微博上也有大量转发。可见确实一个很成功的设计。我准备在 Android 上来实现它。 经过几天的折腾,最终实现并开源在 Github 上,项目地址: FlyRefresh,实际效果如下图: 总体上还原了设计的70%~80%,还有一些细节需要改进。因为没有拿到设计师的设计源文件,动画和颜色的细节并没有能够做的完全一致。下面分享一下实现的过程。 1 分析设计效果图 要实现这个设计,就要非常仔细的分析这个动画的每个细节。由于没有设计源文件,我最开始就一直盯着这个 GIF 图看,然后构思一下大致的实现流程。在写代码的过程中,甚至把 GIF 图分解成一帧一帧的图片来分析,把 GIF 图分解的方法如下: convert -coalesce animation.gif

By Race604

Android

[第18期]Android周报

文章/教程 1. LeakCanary 中文使用说明 良心企业 Square 又出大招,自动检测内存泄露的开源库,内存泄露检测变得非常容易了。 2. Material 适配2 - 高级篇 这篇文章详细讲解了怎么使用 Toolbar 来替换以前的 ActionBar,还有怎么避免踩一些坑。还有这个系列的入门篇。 3. 详解 Dagger 2 Dagger 2 是一个依赖注入框架,已经被 Google 官方接管,其威力可想而知。本文从原理和实践上讲述了 Dagger 2 的使用。 4. Android 如何直播 RTMP 流 Android 上视频流直播解决方案。 5. 聊聊移动端跨平台开发的各种技术 移动开发的各种跨平台技术的综述,跨平台技术可能是未来的趋势,但是谁是最终的胜者却还是未知数。 源代码/库

By Race604