向后兼容Android
问题描述:
我需要在Android SDK v9中调用方法,同时保持与旧版本的兼容性。向后兼容Android
Android developer blog建议使用反射或包装类,但是这一切都真的有必要吗?为什么我不能这样做?
if (Build.VERSION.SDK_INT >= 9)
callNewMethod();
在我看来,这将工作由于Java运行时链接,因为我正在与SDK 9建设。这种方法有什么问题吗?
在此先感谢...
答
根本没有。实际上,它是在开发具有广泛API级别目标的应用程序时被推广为最佳方法的。
如果您不知道类内容和方法是否存在,则反射类是最坚实的方法。但在Android中,您知道什么是受支持的,哪些不受支持。
因此,我不喜欢你给的博客:p
答
不一定是更好的答案,但你在那里做检查假定OS/ROM的建设者正确设置该值。如果设置不正确,则可能尝试访问SDK 9中实际不存在的方法。使用反射是通过尝试调用不存在的方法100%确定不会生成运行时错误的唯一方法。
这正是我所做的,对我一直工作得很好。但是,这只是我的0.02美元,我们会看到如果有人可以给出比这更好的答案... – Eric 2012-07-24 18:35:45
而不是使用数字9作为API级别,使用Build.VERSIONS.XXX其中xxx是由谷歌定义的API版本。只是说:D。 – 2012-07-24 18:40:46
只是猜测:由于Java是一种静态编译的语言,因此每个编译单元(Java中的一个类)都有一个依赖项的列表,在运行该单元的代码之前由加载程序解决。如果使用callNewMethod(),如果在运行时没有callNewMethod(),则可能无法加载类。 – Javier 2012-07-24 18:43:18