Android

Android

[第17期]Android周报

因为最近太(tōu)忙(lǎn),间断了两期周报,我错过了很多,后面会继续保持更新。 文章/教程 1. 自定义 Drawable -- 实现过渡效果 可以通过自定义的 Drawable 轻松实现绚酷图标的过渡效果,实现思路很巧妙。 2. NotRxJava 懒人专用指南 本文作为 RxJava 的入门前传,通过实例一步一步讲解了 RxJava 的诞生原因及其解决的问题,对理解和使用 RxJava 非常有帮助。 3. 安卓 APP 动态调试技术 再没有源代码的情况下调试 Android 应用,也许那天就要用到了呢。 4. Android 性能优化典范 - 第 2 季 @胡凯me 大神又一贡献,总结了 Google 官方的

By Race604

Android

[第16期]Android周报

文章/教程 1. Android 性能优化系列 上期周报推荐了 Google 联合 Udacity 推出免费的 Android 性能优化进阶课程。这里胡凯总结了课程的内容,分为四篇:渲染篇、运算篇、内存篇和电量篇。(@胡凯me) 2. 那些年我们错过的响应式编程 一篇讲解响应式编程思想的文章,并且有一个生动的例子。看起来和 Android 没有什么关系。如果你想在实践 Android 响应式编程(使用RxAndroid),这是一篇非常好的入门文章。 3. 深入浅出 RxJava 四 -- 在 Android 中使用响应式编程 看了上一篇文章,这篇文章就教你怎么在 Android 中使用响应式编程了。这是一个系列文章,主要讲解 RxJava,正好 RxJava 也可以用在 Android 上,

By Race604

Android

[第15期]Android周报

文章/教程 1. Android 性能优化后续 Romain Guy 大神的文章,又一次在没有任何源代码的情况下,利用工具找出 App 的性能问题。好吧,同时随便推荐我的半分钟读完的笔记。 2. Gradle 插件用户指南(译) Android Studio 使用 Gradle 来构建项目。本文是 Gradle 插件详细指南,留作备用。 3. Android 内存优化-使用 MAT 这是系列文章,包括一、二、三,介绍了使用 MAT 工具,进行分析和调试 Android 应用的内存使用方法,图文讲解的非常清晰。 4. 使用 AIDL 实现进程间的通信之复杂类型传递 文章浅显易懂,讲述了一个怎样通过 AIDL

By Race604

Android

[半分钟读完]Android性能实例研究续

这是《几分钟读完》的第二篇,本文是 Android 大神 Romian Guy 的文章 Android Performance Case Study Follow-up。看完这篇,强烈推荐去看大神的原文,引用大神的一句话: Don’t make assumptions, measure! 别瞎蒙,要检测! 大神在没有任何源代码情况下,来分析 Falcon Pro 性能问题。文中 Romain 使用 Android 开发工具 Tracer for OpenGL(这里有这个工具的详细使用方法)。这个工具用来收集所有的 UI 控件发送给 GPU 的绘图命令,所以用它可以清楚的看出 GPU 是怎样逐步绘制你的 View 的。 因为他是大神,从

By Race604

Android

[第14期]Android周报

文章/教程 1. FaceBook 推出的 Android 图片加载库 - Fresco Fresco 的官方介绍,说明了 Fresco 要尝试解决的问题,以及解决思路。 2. Fresco 中文文档 Fresco火的一塌糊涂,官方文档的中文翻译也很快诞生,翻译的还是很精准的。 3. Android 使用 SVG 矢量图打造酷炫动效 这是上期周报推荐的 Android 动效的系列文章之一,动画效果真的是让我不由虎躯一震,看看作者是怎么一步一步实现的。 4. 使用 RxJava.Observable 取代 AsyncTask 和 AsyncTaskLoader 又一个实用 RxJava 大发神威的案例。RxJava 给我们的开发带来很多好处,让你的代码简洁、清晰、健壮,便于维护。总之,RxJava,

By Race604

Android

[第13期]Android周报

文章/教程 1. AndroidEventBus(事件总线)的设计与实现 AndroidEventBus 是一个 Android 平台的事件总线库,它吸收了 Greenrobot 的 EventBus 以及 Square 的 otto 的优点,本文分析了其实现原理。 2. Android 开发最佳实践 android-best-practices 项目的中文翻译,内容涉及 Android 开发的方方面面的小技巧。(PS:中文翻译不是很通顺,可以看看英文原文)。 3. 关于某知名浏览器和聊天工具悬浮窗原理的简单分析 来了解一下 Android 中的黑科技,不为了效仿,而是为了学习原理。 4. Google+ 团队的 Android UI 测试 UI 测试是 Android 的一个难点,来看看 Google

By Race604

Android

[半分钟读完]Android中保存和恢复Fragment状态的最好方法

引言:受谷阿莫的《几分钟看完》系列视频的启发。我也准备写一些几分钟看完的文章,摘录博客的要点,也可以节省查阅的时间。 这是《几分钟读完》的第一篇,文章的原文是:Probably be the best way (?) to save/restore Android Fragment’s state so far。如标题,本文就讲了一个保存 Android 的 Fragment 的状态的方法。 我们都知道,类似 Activity,Fragment 有 onSaveInstanceState() 回调用来保存状态。但是,根据作者的经验,这个方法调用非常的不靠普。Fragment 在屏幕旋转和返回堆栈(Backstack)中的时候,都会创建一个全新的 View,这个 onSaveInstanceState() 方法经常会出现不会被调用的情况,

By Race604

Android

[第12期]Android周报

文章/教程 1. 加速Android Studio/Gradle构建 随着项目的增大,依赖库的增多,构建速度越来越慢,本文介绍的方法,帮你大幅度提高你的Gradle项目编译速度。 2. Github上有哪些适合新人围观的Android项目 @Trinea 在知乎回答的问题,让大牛引导你进门,然后也变为大牛。 3. Android 属性 allowBackup 安全风险浅析 结合实例详解了Android 的 allowBackup 属性的作用,以及可能存在的风险。 4. 每个Android开发者必须知道的内存管理知识 OOM 是 Android 开发着最遇到的问题之一,也是比较难解决的问题。本文介绍了一些开发技巧,能够让你最大限度的远离内存溢出问题。 5. 通过 JNI 调用 OpenSSL 实现加密解密 这是比较高级的应用,这篇文章介绍了编译C/C++库,并集成到Android项目中。 6. Facebook 新闻页

By Race604

Android

[第11期]Android周报

文章/教程 1. 关于谷歌 Material Design:你需要知道的一切(翻译) 本文简要总结了Material Design设计原则和规范。特别是后面有相关的设计资源下载总结,值得收藏。 2. Android Proguard 详解 本文解释了Proguard的基本概念,特别是Proguard出错的一些问题的解决方法。 3. 使用 Chrome 来调试你的 Android App 本文介绍了使用 Facebook 的开源 Stetho 工具的帮助,能够使用 Chrome 来调试 App。主要用来调试网络请求、查看 SqLite 数据库和 SharePreference 等。 4. Volley 源码解析 之前的推荐过 Android 开源项目源码解析 系列。这里系列的一篇文章,详细分析了 Google 的开源网络库

By Race604

Android

BLE开发的各种坑

这段时间在做低功耗蓝牙(BLE)应用的开发(并不涉及蓝牙协议栈)。总体感觉 Android BLE 还是不太稳定,开发起来也是各种痛苦。这里记录一些杂项和开发中遇到的问题及其解决方法,避免大家踩坑。本文说的问题有些没有得到官方文档的验证,不过也有一些论坛帖子的支持,也可以算是有一定根据。 1. Android 从 4.3(API Level 18) 开始支持低功耗蓝牙,但是只支持作为中心设备(Central)模式,这就意味着 Android 设备只能主动扫描和链接其他外围设备(Peripheral)。从 Android 5.0(API Level 21) 开始两种模式都支持。BLE 官方文档在 这里。 在 BluetoothAdapter.startLeScan() 的时候,在 BluetoothAdapter.LeScanCallback.onLeScan() 中不能做太多事情,

By Race604

Android

[第10期]Android周报

文章/教程 1. Android模块化编程之引用本地的aar 使用aar对Android库进行打包,实现Android模块化编程。本文介绍arr基本概念,和在项目中引用本地aar的方法。 2. Android编程下Touch事件的分发和消费机制 本文结合实例分析和解释了Android中的Touch事件分发机制。 3. 深入浅出RxJava(二:操作符) 这是深入浅出RxJava系列的第二篇,介绍了RxJava中的操作符。 4. 这些高效的Android注解,你有使用过么 本文介绍了Android support库中的几个非常实用注解,让你的写代码更方便,更有可读性。 5. Android最佳性能实践(三)——高性能编码优化 系列文章的第三篇,本文介绍一些性能编码优化的小技巧。 源代码/库 1. SwipeBack 使用滑动手势返回,可以支持上、下、左、右四个方向。 2. LoganSquare 极速的JSON解析和序列话库,比GSON和Jakeson快至少400%。并且支持流式API。 3. CropIma

By Race604

Android

[第9期]Android周报

羊年第一期,新春快乐,天天向上。 文章/教程 1. 深入浅出RxJava(一:基础篇) RxJava是一种对JVM的扩展,给Java带来函数响应式编程(Functional Reactive Programming)能力。一种新的编程模式袭来,赶紧学起来。 2. 帮你全面彻底搞定MATERIAL DESIGN的学习笔记 Material Design已经被讨论了无数次了,本文对MD中方方面面做了一个简洁摘要,让你快速对MD有一个大体概念。 3. Android开发贴士集合 一些非常有用但是可能被人忽略的Android开发小贴士集合,一共有四篇(1,2,3,4)。 4. Android Drawable那些不为人知的高效用法 Drawable在我们平时的开发中,基本都会用到。本文从自定义Drawable,自定义Drawable状态,利用Drawable提升UI性能三个方面展开。 5. 公共技术点之面向对象六大原则 面向对象编程六大原则可能能够脱口而出,但是真正实践起来可能就不那么容易,本文结合实例讨论面向对象设计原则。内功心法,需要

By Race604

Android

[第8期]Android周报

文章/教程 1. 开源项目Philm的MVP架构分析 从项目Philm分析实现MVP架构,是一个很好的学习MVP的文章。想要实践MVP架构的朋友不要错过。 2. Java注解处理器 这一篇译文,这是一篇详尽的解释和实现Java注解处理器的文章,文章很长,耐心读完,一定会让你有所收获。 3. Android在横竖屏切换时到底发生了什么? 这是Square的一篇技术博客的译文,我虽然觉得译文的标题有些不妥(或者可以叫屏幕旋转的时候主线程消息处理),但是文章内容还是很值得一看的。 4. Android最佳性能实践(二)——分析内存的使用情况 继上期周报推荐的第一篇之后,这篇文章从分析内存使用的角度入手,叫你在实际项目中,Debug代码内存问题。 5. NineOldAnimations 设计解析 NineOldAndroids是一款支持在低版本( api 11以下 )使用Android属性动画以及3D旋转动画的框架,提供了类似Android 3.0以上的动画API。本文就解析它是怎么实现的。 6. 视频:Android自定义任意层级树形控

By Race604

Android

Java注解处理器

Java中的注解(Annotation)是一个很神奇的东西,特别现在有很多Android库都是使用注解的方式来实现的。一直想详细了解一下其中的原理。很有幸阅读到一篇详细解释编写注解处理器的文章。本文的原文是ANNOTATION PROCESSING 101,作者是Hannes Dorfmann。这是一篇好文,忍不住翻译学习一下。以下是翻译。(注:本文的翻译已经获得了作者 Hannes 的授权。) 在这篇文章中,我将阐述怎样写一个注解处理器(Annotation Processor)。在这篇教程中,首先,我将向您解释什么是注解器,你可以利用这个强大的工具做什么以及不能做什么;然后,我将一步一步实现一个简单的注解器。 一些基本概念 在开始之前,我们首先申明一个非常重要的问题:我们并不讨论那些在运行时(Runtime)通过反射机制运行处理的注解,而是讨论在编译时(Compile time)处理的注解。 注解处理器(Annotation Processor)是javac的一个工具,它用来在编译时扫描和处理注解(Annotation)。你可以对自定义注解,并注册相应的注解处理器。到这里

By Race604

Android

[第7期]Android周报

文章/教程 1. Android App 性能优化实践 App性能优化开始被重视起来。最近连续出了一些写性能优化的文章。本文记录了Android App优化需要用到的工具和以及在实践中的Tips。这里还有UC的工程师分享视频。 2. 深入解析Android的自定义布局 这篇文章是前Firefox Android工程师(现在跳槽去Facebook了) Lucas Rocha所写,文中对Android中常用的四种自定义布局方案进行了很好地分析,并结合这四种Android自定义布局方案所写的示例项目讲解了它们各自的优劣以及四种方案之间的比较。 3. 与Sevice实现双向通信 这是一个系列文章,包括一、二、三。文章非常详尽的介绍和实现了一个简单的Service双向通信的例子。 4. Android最佳性能实践(一)——合理管理内存 本文从合理使用内存的角度,提供了一些编程过程中的一些建议,来优化Android性能。 5. Android 打造编译时注解解析框架 本文讲解了一些关于Java的注解的基本概念,并且介绍怎么实现一个自定义的注解。

By Race604

Android

与Service实现双向通信(三)

1. 与Service实现双向通信(一) 2. 与Service实现双向通信(二) 3. 与Service实现双向通信(三) 这是系列文章《与Service实现双向通信》的第三篇,也是完结篇。通过前两篇介绍,我们基本已经实现了Client到Service的调用了。但是Service怎么反过来调用到我们的Client端呢? 我们接着上篇的例子,我们希望能够实现,当有用户加入(join())或者离开(leave())的时候,能够通知客户端。 实现方法是,客户端注册一个回调到Service中,当Service有用户加入或者离开的时候,就调用此回调。因为普通的interface对象不能通过AIDL注册到Service中,我们需要定义一个AIDL接口,如下: // IParticipateCallback.aidl package com.race604.servicelib; interface IParticipateCallback { // 用户加入或者离开的回调 void onParticipate(String name, boolean join

By Race604