ICU4J 是一个广泛使用的开源 Java 库集合,为软件应用提供 Unicode 和全球化支持。 Android N 在 android.icu 软件包下显示 Android 框架中的 ICU4J API 子集,供应用开发者使用。 这些 API 使用设备上具有的本地化数据。 因此,您可以通过不将 ICU4J 库编译到 APK 来减少 APK 占用空间;相反,您可以只在框架中调用它们。 (在此情况下,您可能想要提供多个版本的 APK,这样,运行比 Android N 低的 Android 版本的用户可以下载包含 ICU4J 库的应用版本。)

本文档开头提供了有关支持这些库所需的最低 Android API 级别的一些基本信息。 然后,介绍关于 Android 特定的 ICU4J 实现您需要了解的内容。 最后,介绍如何在 Android 框架中使用 ICU4J API。

与 ICU4J 的关系


Android N 通过 android.icu 软件包(而非 com.ibm.icu )显示 ICU4J API 的子集。由于种种原因,Android 框架可能选择不显示 ICU4J API;例如,Android N 不显示一些已弃用的 API 或 ICU 团队尚未将其声明为“稳定”的 API。 由于 ICU 团队将来会弃用这些 API,因此,Android 也会将其标记为已弃用,但将继续包含它们。

表 1. Android N 中使用的 ICU 和 CLDR 版本。

Android API 级别 ICU 版本 CLDR 版本
Android N 56 28

以下是几点注意事项:

  • ICU4J Android 框架 API 不包含所有的 ICU4J API。

  • NDK 开发者应了解 Android ICU4C 不受支持。

  • Android 框架中的 API 不会取代 Android 对使用资源进行本地化的支持。

从 com.ibm.icu 迁移至 android.icu 软件包


如果您已在应用中使用 ICU4J API,且 android.icu API 符合您的要求,那么要迁移至框架 API,需要将 Java 导入从 com.ibm.icu 更改为 android.icu 。 然后,您可以从 APK 移除您自己的 ICU4J 文件的副本。

:ICU4J 框架 API 使用 android.icu 命名空间,而不是 com.ibm.icu 。这是为了避免在包含自己的 com.ibm.icu 库的 APK 中出现命名空间冲突。

从其他 Android SDK API 迁移至 android.icu API

java android 软件包中的某些类与在 ICU4J 中找到的一些类等效。 不过,ICU4J 通常为标准和语言提供更广泛的支持。

下面是一些入门示例:

替代项
java.lang.Character android.icu.lang.UCharacter
java.text.BreakIterator android.icu.text.BreakIterator
java.text.DecimalFormat android.icu.text.DecimalFormat
java.util.Calendar android.icu.util.Calendar
android.text.BidiFormatter android.icu.text.Bidi
android.text.format.DateFormat android.icu.text.DateFormat
android.text.format.DateUtils android.icu.text.DateFormat android.icu.text.RelativeDateTimeFormatter

授权


ICU4J 按照 ICU 许可发布。如需了解详情,请参阅 ICU 用户指南。


python 多线程的问题 python多线程的作用

线程一.什么是线程?操作系统原理相关的书,基本都会提到一句很经典的话: "进程是资源分配的最小单位,线程则是CPU调度的最小单位"。 线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务 好处 : 1.易于调度。2.提高并发性。通过线程可方便有效地实现并发性