android – VerifyError,还是在保持兼容性的同时使用overridePendingTransition?

我有一个应用程序,它使用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版本有条件地使用更新的功能

解决方法

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()测试中才会加载它的类,并且你不会得到VerifyError.

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...