📜  getDrawable(Int):可绘制!已弃用. - Kotlin (1)

📅  最后修改于: 2023-12-03 15:15:15.281000             🧑  作者: Mango

介绍:getDrawable(Int) 方法的淘汰

概述

getDrawable(Int) 方法是 Android 提供的一种获取可绘制对象的方法。它接受一个资源 ID(即 R.drawable 等)作为参数,并返回对应的可绘制对象。然而,该方法现已被标记为“已弃用”。这意味着,它仍然可以使用,但不再推荐使用,因为它可能存在一些问题,需要注意,并最终将被删除。

为什么弃用?

这个方法被标记为“废弃”,是因为它可能存在以下一些问题:

  1. 兼容性问题:该方法存在于较早版本的 Android 中。随着 Android 的更新,该方法可能会变得不稳定或不可用。因此,如果你的应用需要在多个 Android 版本上运行,最好不要使用该方法。

  2. 性能问题:getDrawable(Int) 返回的是一个包装了原始 Drawable 对象的 Drawable 对象。如果你只需要原始的 Drawable 对象,则必须使用 Resources.getDrawable(Int, Theme) 重载方法,这样可以避免性能问题。

  3. 安全问题:使用 getDrawable(Int) 可以导致潜在的安全问题,因为该方法可以返回各种类型的 Drawable,包括 BitmapDrawable、NinePatchDrawable 等。如果你不小心使用了错误的 Drawable 类型,则可能会导致应用程序崩溃或出现其他问题。因此,使用 Resources.getDrawable(Int, Theme) 可以更好地控制返回的 Drawable 类型。

替代方法

替代方法是使用 ContextCompat.getDrawable(Context, Int) 方法或 ResourcesCompat.getDrawable(Resources, Int, Theme) 方法。这两种方法都提供了更好的向后兼容性和更好的性能。例如,ContextCompat.getDrawable(Context, Int) 方法自动完成了资源 ID 的转换,并根据当前主题返回正确的 Drawable。

总结

弃用 getDrawable(Int) 是为了更好的向后兼容性和更好的性能。如果你正在使用这个方法,最好考虑使用替代方法,例如 ContextCompat.getDrawable(Context, Int)ResourcesCompat.getDrawable(Resources, Int, Theme)。这些方法提供了安全、可靠的方式来获取 Drawable 对象,并可以避免一些常见的问题。