7

我有一个应用程序,它使用 overridePendingTransition 在从一个活动过渡到另一个活动时执行一些自定义动画。这是在 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 版本有条件地使用更新的功能?

4

1 回答 1

15

是否不能根据 SDK 版本有条件地使用更新的功能?

是的。

我猜你的代码是这样的:

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, ...);
}

其中overridePendingTransition()in的实现SomeClassDedicatedToThisOperation只调用overridePendingTransition()提供的Activity.

只要SomeClassDedicatedToThisOperation没有在其他任何地方使用,它的类在你进入测试之前不会被加载if(),并且你不会得到VerifyError.

于 2010-08-26T12:18:48.380 回答