android – 可以将反射与属于大于最小sdk的方法一起使用吗?

android – 可以将反射与属于大于最小sdk的方法一起使用吗?,第1张

概述我正在开发一个必须支持至少10级sdk的应用程序.今天,当我遇到一个我需要使用的方法setLayerType()时,我正在编码.但是这个方法是在API级别11中引入的.因此,我使用了一种解决方法并使用Reflection来使用此方法. 所以,我的问题是,我的应用程序不会在API级别10上运行的设备上崩溃吗? 这个问题出现在我的脑海中,因为即使我在这里使用Reflection,我仍然在调用API级别 我正在开发一个必须支持至少10级sdk的应用程序.今天,当我遇到一个我需要使用的方法setLayerType()时,我正在编码.但是这个方法是在API级别11中引入的.因此,我使用了一种解决方法并使用Reflection来使用此方法.

所以,我的问题是,我的应用程序不会在API级别10上运行的设备上崩溃吗?

这个问题出现在我的脑海中,因为即使我在这里使用Reflection,我仍然在调用API级别11中引入的方法.当我在API级别10上运行的Android设备上运行我的应用程序时,此方法是否成功运行还是会崩溃?

As stated in source,该方法将独立于OS级别运行.但是,为什么它应该在仍然使用API​​级别10的AndroID.jar的API级别10设备上成功运行,并且该文件甚至不包含此方法?

我试图搜索它但找不到解释.

附:我想在API级别为10的设备上进行测试,但由于构建完整的应用程序需要一些时间,因此无法立即在API级别10设备上测试应用程序.

解决方法 不,当然,如果您调用其API级别中不存在的方法,应用程序将崩溃.无论你是否通过反思来调用都是如此.

反思的一点是,您可以根据API级别选择是否调用它.比较http://developer.androID.com/reference/androID/os/Build.VERSION.HTML#SDK_INT到您的代码中的http://developer.androID.com/reference/androID/os/Build.VERSION_CODES.HTML如果SDK编号足够高,则仅进行反射调用.

关键是你将带有字节码引用的代码与任何方法,或者所有API级别中不存在的常量或类隔离到一个仅由反射加载的单独类中.

这是我为了管理这种事情而创建的一些实用程序代码的示例;它基于API级别加载一个或另一个接口实现:

https://code.google.com/p/zxing/source/browse/trunk/android/src/com/google/zxing/client/android/common/PlatformSupportManager.java?spec=svn2361&r=2361

编辑:@ FD_的答案也有效,令我感到惊讶.反射更安全,但代码更多.事实上,最近(如果不是全部)AndroID JVM似乎不需要反射方法.

总结

以上是内存溢出为你收集整理的android – 可以将反射与属于大于最小sdk的方法一起使用吗?全部内容,希望文章能够帮你解决android – 可以将反射与属于大于最小sdk的方法一起使用吗?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1122190.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存