Race604

Android

Drawable 着色的后向兼容方案

看到 Android Weekly 最新一期有一篇文章:Tinting drawables,使用 ColorFilter 手动打造了一个 TintBitmapDrawable,之前也看到有些文章使用这种方式来实现 Drawable 着色或者实现类似的功能。但是,这种方案并不完善,本文将介绍一个完美的后向兼容方案。 解决方案 其实在 Android Support V4 的包中提供了 DrawableCompat 类,我们很容易写出如下的辅助方法来实现 Drawable 的着色,如下: public static Drawable tintDrawable(Drawable drawable, ColorStateList colors) { final Drawable wrappedDrawable = DrawableCompat.wrap(drawable); DrawableCompat.setTintList(wrappedDrawable, colors); return wrappedDrawable; } 使用例子: EditT

By Race604

Android

[第28期]Android周报

文章/教程 1. Android NestedScrolling 实战 Android 5.0 和 Support V4 包中开始提供一套 NestedScrolling API 来支持嵌入的滑动。有了 NestedScrolling 可以实现很多复杂的滑动效果。 2. [译]深入讲解Android中Activity launchMode 这是我见过的最清晰的 Activity 的启动模式讲解,丰富的图片展示,把各种情况展示的非常清晰。 3. Android OkHttp 完全解析 本文介绍了 OkHttp 的基本使用,并且通过简单的封装,实现一个请求管理类,简化使用。 4. Glide 一个专注于平滑滚动的图片加载和缓存库 本文介绍了使用 Glide 的一些技巧,在使用过程中可能遇到的问题及其解决方法。同时推荐看这篇文章:Google推荐的图片加载库Glide介绍。 5. 【译】Don&

By Race604

Android

Android NestedScrolling 实战

从 Android 5.0 Lollipop 开始提供一套 API 来支持嵌入的滑动效果。同样在最新的 Support V4 包中也提供了前向的兼容。有了嵌入滑动机制,就能实现很多很复杂的滑动效果。在 Android Design Support 库中非常重要的 CoordinatorLayout 组件就是使用了这套机制,实现了 Toolbar 的收起和展开功能,如下图所示: NestedScrolling 提供了一套父 View 和子 View 滑动交互机制。要完成这样的交互,父 View 需要实现 NestedScrollingParent 接口,而子 View 需要实现 NestedScrollingChild 接口。 实现 NestedScrollingChild 首先来说 NestedScrollingChild。如果你有一个可以滑动的 View,需要被用来作为嵌入滑动的子 View,

By Race604

Android

Android 6.0 中新的新技术

最近 Google 正式发布了 Android M,并命名为“棉花糖”(Marshmallow),对于开发者来说,有哪些新的技术和变化呢?本文尝试总结一下 Android 6.0(API 23)给开发者带来新的技术和改变。 权限管理 权限管理是 Android M 最大的改变,权限管理更加精细,并且由以前的安装时静态授权,改为现在的运行时动态授权。大家对 Android 的权限吐槽已久,Android 应该能极大的改善这方面的问题。主要改变有: * 系统设置中可以对 APP 各个权限单独控制 * 权限根据内容进行分组了 * 普通权限还是在安装时授权 * 其他权限在运行时系统弹窗授权,并且要解析使用这个权限的目的 对于开发者来说,需要小心处理权限相关的问题。在使用某个功能的时候,需要总是判断是否有改权限,并且通过合适的方式请求用户授权。关于 Android M 权限的处理,可以参考官方文档。 另外,这篇文章结合图文和代码讲述了

By Race604

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

博客从 Ghost 迁移到 Hexo

这两天我的博客不能访问了,因为 Azure 服务器这个月到期了,服务器被彻底回收了。我立刻买了一个阿里云的服务器,安装好环境,配置好我钟爱的 Ghost 博客。因为之前的博客数据都备份的很好,很快恢复了全部博文。然后把我的域名修改一下解析,访问 www.race604.com,完美。正当我舒一口气的时候,网页突然变成了这样: WTF,这是什么鬼,竟然要!!备!!案!!,因为之前的服务器实在香港,所以一直不知道还有这么回事。我按照网上的流程,赶紧走备案流程,填写资料、上传身份证、打印核验单、签字、拍照片照相上传,提交。我能做的就是等了。 同时,我向群里的大神们求助,了解到,如果使用阿里云的服务器,使用 80 端口搭建网站,必需要备案,而且备案流程需要 20 天左右,今天接到阿里云客服的电话,也确认需要 18

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