今天下午的时候有人问到,AS 哪里能配置 build.gradle
的模板,从而达到每次新建 module 时默认的 compileSdkVersion
用指定的值而不是取最新 SDK 的 api-string。
Forking a Repository
某些场景下,我们需要基于某个仓库的 tag
、branch
或者 commit
来进行二次开发。
[译] 使用 ColorFilter 快速地主题化
从 Android L 开始,Material Theme 能够借助某些属性主题化 APP(图标及其他)
|
|
LoaderManager 源码分析
文中提及的 Loader 相关知识基于 supprot.v4 24.0.0 中的 Loader 相关源码,android framework 的基本大同小异。
简介
关于 LoaderManager,Android Developer 上写道:LoaderManager 是与 Activity 或 Fragment 相关联的抽象类,用于管理一个或多个 Loader 实例。LoaderManager 有助于管理与 Activity 或 Fragment 生命周期相关联的、运行时间较长的操作。最常见的用法是与 CursorLoader 一起使用,但应用可以使用自定义的 Loader 用于加载其他类型的数据。
那么 LoaderManager 到底是如何管理 Loader,又是做到与 Activity、Fragment 的生命周期关联呢?本文将围绕这两个问题进行探究。
Loader 浅析
文中提及的 Loader 为 support v4 的 Loader。
简介
Loader 机制在 android 3.0 后加入 android framework,其目的主要在于方便在 Activity 和 Fragment 中加载异步数据。
Loader 本身不具备异步加载的能力,真正赋予了异步加载能力的是 AsyncTaskLoader,而且 Loader 基本会跟 LoaderManager 绑定一起使用,如独立使用 Loader,意义并不大,因为真正将 Loader 和 Activtiy、Fragment 的生命周期关联的是 LoaderManager。所以说,Loader 本身不具备太多能力,基本是负责对 Loader 状态标记的修改以及调用部分相关的回调。
Activity 数据恢复时移除 Fragment 数据
某些场景下(如内存不足),系统销毁 Activity 时会调用 onSaveInstanceState(),而 Fragment 也会在此方法中保存自身的状态。之后用户重新打开对应的 Activity 时,系统则会通过 onCreate(Bundle) 或者 onRestoreInstanceState(Bundle) 恢复 Activity 的状态,而 Fragment 的状态会在 onCreate(Bundle) 中恢复。
某些特殊需求下,我们并不需要 Fragment 恢复之前的状态,那么就需要在 Fragment 数据恢复前移除 Fragment 的数据。首先我们来看一下 Activity 中是如何恢复 Fragment 数据的:
Android Gradle 获取 APK 签名状态及对齐状态
最近由于公司 CI 对所有项目做规范化处理,现有项目都需要按照规范修改 APK 的文件名。 由于 CI 只需要已签名并已对齐的 APK,所以需要获取 APK 的签名状态及资源对齐状态。
在 StackOverflow 及 Google 上搜索了一番只找到 zipAlign 的代码,没办法只能去看 ApplicationVariant 的代码。费了些时间才找到获取签名状态的 API,遂记录之。
[译] ProGuard 选项
Android 动态加载 layout 资源
在阅读前,请确保你已经了解动态加载资源的基本知识,相关知识请阅读 《从高德 SDK 学习 Android 动态加载资源》
由于 LayoutInflater 在 inflate 的过程中会调用 Context 的 getResources()、getTheme() 方法,所以在进行动态加载 layout 资源前,我们需要修改上述方法的返回值。根据不同的情况,存在两种修改方法。
从高德 SDK 学习 Android 动态加载资源
前不久跑去折腾高德 SDK 中的 HUD 功能,相信用过该功能的用户都知道 HUD 界面上的导航转向图标是动态变化的。从高德官方导航 API 文档中 AMapNaviGuide 类的描述可知,导航转向图标有23种类型。
诶,等等,23 种?那图标应该是放在 assets 文件夹吧?总不可能是在服务器上下载吧?