我的应用程序支持Android 2.3.3版(SDK 10)及更高版本。我有一个简单的代码:
private void setBackgroundToView(View view, Drawable drawable) {
if (Build.VERSION.SDK_INT >= 16) {
view.setBackground(drawable);
} else {
view.setBackgroundDrawable(drawable);
}
}
我发现在GT-I9100G上安装了android 4.0.3,这将有sdk版本15跟随日志:
I/dalvikvm(13683): Could not find method android.view.View.setBackground, referenced from method %some_package%.setBackgroundToView
这意味着Build.VERSION.SDK_INT
的值超过15。
在这种情况下,如何防止非法调用不受支持的方法?
对于相同的SDK版本,是否每个设备和os版本的固件都相同sdk_int?
我可以使用Build.VERSION.RELEASE来检查版本号吗?
答案 0 :(得分:4)
请注意,日志标记为I
以获取信息,而不是E
标记错误。
类加载器加载代码,在验证字节码时,它会找到对缺少方法的调用并记录它。代码本身没有被执行,如果是,你会得到NoSuchMethodError
。
您的SDK_INT
值正常工作。
答案 1 :(得分:0)
为什么不一直只使用setBackgroundDrawable
?
此外,您应该调试该设备的SDK-INT
版本,而不是仅假设它是15左右。
答案 2 :(得分:0)
如前所述,我只会使用setBackgroundDrawable,因为你没有任何setBackground的优点,无论如何。
如果您仍想使用它。重新检查设备的SDK版本。我不知道Build.VERSION.SDK_INT没有正确设置的任何设备。如果setBackground引发异常,你也可以执行try / catch并回退到setBackgroundDrawable。
答案 3 :(得分:0)
我使用此代码:
if (Build.VERSION.SDK_INT<16){
rl.setBackgroundDrawable(getResources().getDrawable(image));
} else {
rl.setBackground(getResources().getDrawable(image));
}
好的,您可以随时使用上面提到的setBackgroundDrawable
,但如果不这样做,上面的代码就可以完美运行。