【问题标题】:Android KTX or AnkoAndroid KTX 或 Anko
【发布时间】:2018-05-16 01:57:10
【问题描述】:

我对使用Android KTXAnko 的优缺点有点困惑。因为这两个库都在努力实现相同的最终目标,并且它们之间的界限变得有点模糊,in some cases, the same functionality is available in both libraries

如果您能帮助我阐明每个人的任务及其用例,我将非常感激。

提前致谢!

【问题讨论】:

  • KTX 是一个较新的项目,由实际的 Android 团队维护。如果发现功能被 Anko 复制/重写,我不会感到惊讶
  • 我对协程也有同样的疑问。这些现在在标准库中可用,所以也许 anko 可以被弃用?

标签: android anko kotlin-extension android-ktx


【解决方案1】:

Anko 是 JetBrains 在开发 Kotlin 并使其与 Android 相关时开始的一个项目。我认为它是 Kotlin 可能性的早期生产就绪展示。

Anko 以 Anko 布局而闻名,但在 Anko Commons 中也有一些用于 Android 开发的扩展,还有一些其他模块,如 SQLite。

然而,Anko 库在更新后积累了大量的方法更新,这使得今天当每个 dex 文件限制为 65K 方法时,该库相对重量级(出于 apk 大小和性能原因,我更喜欢使用单个方法) )。

Anko commons 为 Android 提供扩展,因此它在某种程度上类似于 Android KTX,但它的集成和组织(包和工件方面)不如 Android KTX,后者现在是 AndroidX 的一部分,它是 Android Jetpack 的一部分.顺便说一句,使库更小、更松耦合是 Android Jetpack / Android X 哲学的一部分。

所以Android KTX,显然是未来,我认为没有理由不加入这艘船,或者更确切地说,不让它加入您的 Android 项目。

另外,as you yourself pointed out,未来的 Anko 版本将弃用(并可能最终删除)与 Android KTX 的重叠,仅提供 AndroidX 中没有的功能。

包括一个无耻的插件: 既然您在谈论 Anko,如果 Anko 布局引起了您的注意,但您遇到了与它们的斗争(尤其是在与自定义或第三方视图交互时),我建议您查看 Splitties 中的 Views DSL,其中比 Anko 布局更灵活,而且非常轻量级。您可能也对其他模块感兴趣。我开始这个项目是为了在工作和家里的 Android 项目中利用 Kotlin 功能。

你还没有问过这个问题,但这是我对 Anko 协程的看法: 我发现 bg { … } 扩展令人困惑。我更喜欢将 kotlinx.coroutines 与 Android 工件一起使用,使用 launchwithContext 等,以及 Dispatchers.IO

但是,Anko 协程侦听器(例如可以暂停的 onClick)在 IMO 中并不是一个坏主意。

【讨论】:

  • 感谢您的详细解答,真的帮了大忙!
  • @Louis CAD,Anko Layouts 是否有任何迁移到 Android KTX 和/或 XML 的迁移?由于我正在开发一个使用 Anko Layouts 进行设计的项目,并且 anko 支持库预览不适用于最近的 IDE 更新,并且 Anko 团队没有发布任何有关此的更新。所以有转换方法会很有帮助。
  • @Krantiz 没有这样的东西。但是,您可以将 Anko 布局集成到自定义视图(例如 FrameLayout 子类)中,然后您可以在 xml 中进行预览。这就是我在 Splitties Views DSL 中所做的。如果您需要更深入的建议,可以通过 Kotlin 的 Slack 或 Twitter DM 向我提问。
【解决方案2】:

Anko 是 JetBrains 的 Kotlin 库。它与 Android KTX 的目标相同,即让您作为 Android 开发人员的生活更轻松,并使您的代码更具可读性和易用性。 Android KTX 和 are Anko 相似但又不完全相同。

Anko 和 Android KTX 的区别

他们有共同的目标,但考虑的范围不同。 KTX 的使命是为 Kotlin 用户带来惯用的 API。 KTX 不打算向现有的 Android API 添加新功能。 Anko 的范围更广,这使其能够灵活地创新和创建新功能

决定何时使用 Anko 或 Android KTX

一般来说,Anko 和 Android KTX 涵盖了 Android API 的不同部分,您没有理由不能在您的项目中同时使用这两者。单独研究每一个,并在您的项目中尽可能多地使用它们!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多