EN

Android 小技巧 -2

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

2026-10-13 核查:本文是 2014 年的 View/系统工具 API 清单。Activity.onBackPressed() 从 API 33 废弃,文字布局应优先使用 API 23 起的 Builder;下面补充替代方式,并修正闹钟、应用内存和屏幕密度的解释。

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

正文

DateUtils.formatDateTime() 按本地区域设置格式化日期或时间,传入的是 epoch 毫秒值,通过 flags 选择显示日期、星期或时间。适合面向用户的显示,不适合作为固定格式的数据交换协议。

AlarmManager.setInexactRepeating() 允许系统调整重复闹钟的触发时刻,以便合并唤醒。它不会自动调用 cancel();不再需要时由应用取消。从 Android 4.4(API 19)起,面向 API 19 及以上的重复闹钟都按非精确方式处理。RTC 不唤醒休眠设备,RTC_WAKEUP 才请求唤醒,但都可能受系统省电策略影响。不能用「休眠 8 小时必定合并 16 次」作为固定行为或省电量保证。仅需一次通知时使用一次性闹钟;任务调度与精确闹钟的适用边界见官方闹钟指南。

Formatter.formatFileSize() 把字节数转换为本地化的文件大小字符串。Android 8.0(API 26)起使用 SI 单位,例如 1 kB 为 1000 字节;旧版按 1024 进位。适合显示,不能把返回字符串再解析成精确的存储大小。

ActionBar.hide() / show() 隐藏或显示应用的 ActionBar。它不会同时隐藏系统状态栏和导航栏,因此不等于进入沉浸式全屏;使用独立 Toolbar 时还要按实际组件处理。

Linkify.addLinks() 根据类型掩码或正则表达式,为匹配到的文本添加 URLSpan。使用 Spannable 重载后放入 TextView,还需要配置合适的 MovementMethod 才能响应链接点击。

StaticLayout 用于自定义 View 的多行文字排版、测量和绘制。Android 6.0(API 23)起优先使用 StaticLayout.Builder,指定文本、TextPaint 和宽度,再设置行距等选项并调用 build();文本或宽度变化后需要重新布局。

Activity.onBackPressed() 是旧的返回事件入口,Android 13(API 33)起已废弃。使用 AndroidX Activity 1.6.0 及以上的 OnBackPressedDispatcher / OnBackPressedCallback,或平台 API 33 的 OnBackInvokedCallback,可以按新的返回导航模型处理事件。原文「重写 onBackPressed 即可」的做法应迁移,具体见预测性返回指南。

GestureDetector 接收 MotionEvent 并识别点击、长按、滚动和 fling。需要把触摸事件交给它的 onTouchEvent();使用 SimpleOnGestureListener 时,通常要让 onDown() 返回 true,后续手势才会继续处理。常见手势处理

DrawFilter 安装到 Canvas 后,可以临时修改该 Canvas 绘制操作使用的 Paint,例如调整抗锯齿标志。它不代替 onDraw(),也不能从一个子 View 自动改写所有父子 View 的绘制;自定义绘制优先直接配置自己使用的 Paint。

ActivityManager.getMemoryClass() 返回设备上每个普通应用的大致内存级别,单位为 MB,可用于估计 Java/Kotlin 堆与缓存的预算。它不是设备剩余 RAM,也不是当前进程已用内存;native、图形缓冲等内存还需要分别观察。

ViewStub 是延迟加载布局的占位 View。调用 inflate() 或把可见性设为 VISIBLE/INVISIBLE 后,布局会替换 ViewStub;后续操作要使用返回的根 View。它不支持作为待加载布局根节点的 <merge>,原文遗漏的正是这个标签。按需加载布局

SystemClock.sleep() 阻塞当前线程,按 uptimeMillis 等待指定毫秒数,并保留中断状态;深度休眠时间不计入这个时钟,调度延迟也可能使实际返回更晚。适合后台调试中的人为等待,不能在主线程用它模拟异步网络,也不适合需要立即响应取消的任务。

DisplayMetrics.density 是 dp 到 px 的逻辑缩放系数,不是屏幕的物理 dpi;通常 px = dp × density。它是字段而非方法。使用当前界面 Context 的资源配置,避免把某台设备的数值固定下来。

Pair.create() 创建保存两个值的 Pair<A, B>,可通过 first 和 second 读取。它只是二元容器的工厂方法;有明确业务含义的数据通常更适合使用具名类型。

备忘

More

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

原文地址:https://blog.danlew.net/2014/04/14/android-tips-round-up-part-2/
原文作者:https://blog.danlew.net/about/
本文地址:https://www.androidperformance.com/2014/05/31/android-tips-round-up-2/ 转载请注明.

关于我 && 博客

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

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

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

微信扫一扫

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