EN

Android 小技巧 - 1

字数统计: 1.4k阅读时长: 5 min
2014/05/28
loading

2026-10-13 核查:这份清单原写于 2014 年,主要面向 Android View 系统。多数 API 仍然有效;旧版 Html.fromHtml(String) 从 API 24 废弃,下面补充替代签名,并修正缓存目录、布局加载和动画反向播放的说明。

本文是一篇译文,这篇是这个系列的第一篇.讲述的是Android开发中遇到的一些好用的小技巧,或者一些实用的API,很多人都知道,但也有人不知道,记录下来,如果能帮助到大家,也是极好的.由于不是严格的博文,所以翻译也不那么严格,有些工具和类我也会经常用,所以我会根据自己的想法去写.有些地方作者并没有将这个工具的作用讲出来,我会补充上去.

正文

Activity.startActivities() 按 Intent 数组指定的顺序构造多个 Activity 的启动路径,适合进入流程中间页面时保留返回路径。通常只有数组最后一个 Activity 会立即创建,前面的页面在用户返回时再创建;实际任务行为还受 launchMode 和 Intent flags 影响。

TextUtils.isEmpty() 判断字符序列是否为 null 或长度为 0。只含空格的字符串不会被判为空。

Html.fromHtml() 把 HTML 字符串解析为带样式的 Spanned,供 TextView 等控件显示。它不生成 HTML,也不是完整浏览器。Android 7.0(API 24)起使用 fromHtml(source, flags);需要兼容低版本可使用 AndroidX Core 1.1.0 起提供的 HtmlCompat.fromHtml,但 API 24 以下会忽略 flags。只给局部文字加粗时,直接构造 Spannable 可以避免 HTML 解析;是否构成性能瓶颈仍取决于文本大小和调用频率。

TextView.setError() 在输入校验失败时显示错误图标和提示;传入 null 可以清除错误。它负责显示结果,具体校验规则仍由应用提供。

Build.VERSION_CODES 定义各个 Android API 级别的命名常量。设备正在运行的 API 级别要读 Build.VERSION.SDK_INT,例如与 Build.VERSION_CODES.N 比较后再调用 API 24 的方法;常量表本身不是当前版本号。

Log.getStackTraceString() 把异常堆栈转为字符串,便于写入自定义日志。但异常因果链中包含 UnknownHostException 时会返回空字符串,不能把空结果解释成没有异常。

LayoutInflater.from(),经常写 Adapter 的人应该很熟悉。它接收 Context,返回对应的 LayoutInflater;创建 View 还要调用后面的 inflate(layoutId, parent, attachToRoot)。在 Adapter 中传入实际 parent,可以生成匹配父布局的 LayoutParams。

ViewConfiguration.getScaledTouchSlop() 返回触摸移动被视作滚动前允许的距离,单位是像素。通过 ViewConfiguration.get(context) 取得配置,避免在不同密度设备上写死同一个阈值;手势处理代码仍要自己比较位移。

PhoneNumberUtils.convertKeypadLettersToDigits() 按电话键盘映射把号码中的英文字母转为数字,例如 1-800-GOOG-411 转为 1-800-4664-411。它不提供 T9 候选词预测,也不负责验证号码是否有效。

Context.getCacheDir() 返回应用内部缓存目录,不是外部存储的 Android/data/<package>/cache/。后者应通过 getExternalCacheDir() 获取,并处理返回 null 的情况。缓存文件可能因空间不足被清理,卸载应用也会删除;应用应允许缓存缺失,持久数据使用其他目录。实际路径由系统管理,不要拼接固定路径。

ArgbEvaluator 用于 ARGB 颜色插值,API 11 起可用。译这篇时我还没用过这个类,先记了下来。它的 evaluate() 接口使用对象参数和返回值;原文提到的装箱开销可以作为排查线索,不过是否值得自己实现,还得看测量结果。API 21 起也可以直接用 ValueAnimator.ofArgb() 创建颜色动画;它不是「无装箱」保证。

ContextThemeWrapper 为一个 Context 包装不同的主题,常用于按指定主题创建 View 或 Dialog。应在创建这些界面对象前设置主题;它不会自动重绘已经创建的整棵 View 树。

Space 是 Android 4.0(API 14)加入的轻量 View,用于在布局中占位。它的 draw() 不绘制内容,但仍参与测量和布局。

ValueAnimator.reverse() 让动画反向播放:运行中从当前进度反向,尚未运行则从终点开始。它不是取消动画;需要立即停止时使用 cancel(),且要在运行动画的线程调用。

备忘

More

  1. Part1
  2. Part2
  3. Part3
  4. Part4
  5. Part5

原文地址:https://blog.danlew.net/2014/03/30/android-tips-round-up-part-1/
原文作者:https://blog.danlew.net/about/
本文地址:https://www.androidperformance.com/2014/05/28/android-tips-round-up-1/ 转载请注明.

关于我 && 博客

下面是个人的介绍和相关的链接,期望与同行的各位多多交流,三人行,则必有我师!

  1. 博主个人介绍 :里面有个人的微信和微信群链接。
  2. 本博客内容导航 :个人博客内容的一个导航。
  3. 个人整理和搜集的优秀博客文章 - Android 性能优化必知必会 :欢迎大家自荐和推荐 (微信私聊即可)
  4. Android性能优化知识星球:付费社群已于 2026 年停止运营,不再招收新成员;此处保留历史介绍。

一个人可以走的更快 , 一群人可以走的更远

微信扫一扫

CATALOG
  1. 1. 正文
  2. 2. 备忘
    1. 2.1. More
  • 关于我 && 博客