当前位置 : 主页 > 手机开发 > android >

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

来源:互联网 收集:自由互联 发布时间:2021-06-11
我正在开发一个必须支持至少10级sdk的应用程序.今天,当我遇到一个我需要使用的方法setLayerType()时,我正在编码.但是这个方法是在API级别11中引入的.因此,我使用了一种解决方法并使用
我正在开发一个必须支持至少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似乎不需要反射方法.

网友评论