我有一个应用程序,它使用 overridePendingTransition 在从一个 Activity 转换到另一个 Activity 时执行一些自定义动画。这在 Android 2.0 中可用,但我想让该应用程序在 Android 1.6 上运行。我想如果我只是检查了 android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.DONUT,如果没有,就不要执行 overridePendingTransition。
但是,我得到一个 VerifyError,我认为这是由此引起的: VFY: 无法解析虚拟方法 346: ../../Login: overridePendingTransition (II)V
是否不能根据SDK版本有条件地使用更新的功能?
最佳答案
Is it not possible to use newer functionality conditionally based on the SDK version?
是的,是的。
我猜你的代码看起来像这样:
if (android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.DONUT) {
overridePendingTransition(...);
}
如果我是对的,那将行不通。 VM 将在加载类时尝试查找 overridePendingTransition()
,而不是在执行 if()
语句时。
相反,您应该能够这样做:
if (android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.DONUT) {
SomeClassDedicatedToThisOperation.overridePendingTransition(this, ...);
}
SomeClassDedicatedToThisOperation
中 overridePendingTransition()
的实现只是在提供的 Activity
上调用 overridePendingTransition()
。
只要 SomeClassDedicatedToThisOperation
没有在其他任何地方使用,它的类将不会被加载,直到您进入 if()
测试,并且您不会得到 验证错误
。
关于android - VerifyError,还是在保持兼容性的情况下使用 overridePendingTransition?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3574687/