6.3Android编程权威指南(第3版)————安全添加新版本API中的代码

应用的SDK最低版本和编译版本间的差异较大,由此带来的兼容性问题需要处理。例如,在应用中,如果调用了KitKat(API 19级)以后的SDK版本中的代码会怎么样呢?结果显示,在 KitKat 设备上安装运行时,应用会崩溃。

假如APP的minSDKVersion是19,添加如下代码,该代码是API21之后出现的

int cx = mShowAnswerButton.getWidth() / 2;
int cy = mShowAnswerButton.getHeight() / 2;
float radius = mShowAnswerButton.getWidth();
Animator anim = ViewAnimationUtils
.createCircularReveal(mShowAnswerButton, cx, cy, radius, 0);
anim.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
mShowAnswerButton.setVisibility(View.INVISIBLE);
}
});
anim.start();

Android Lint会立即提示,这段代码对于最低版本SDK是不安
全的。如果没看到提示,请选择Analyze → Inspect Code…菜单项手动触发Lint。因为SDK编译版本为API 21级,编译器本身编译代码没有问题,而Android Lint知道项目SDK最低版本,所以及时指出了问题。

该怎么消除这些错误信息呢?
一种办法是提升SDK最低版本到21。然而,提升SDK最低版本只是回避了兼容性问题。如果应用不能安装在API 19级和更老版本设备上,那么也就不存在新老系统的兼容性问题了。因此,实际上这并没有真正解决兼容性问题。比较好的做法是将高API级别代码置于检查Android设备版本的条件语句中。
如下:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
int cx = mShowAnswerButton.getWidth() / 2;
int cy = mShowAnswerButton.getHeight() / 2;
float radius = mShowAnswerButton.getWidth();
Animator anim = ViewAnimationUtils
.createCircularReveal(mShowAnswerButton, cx, cy, radius, 0);
anim.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
mShowAnswerButton.setVisibility(View.INVISIBLE);
}
});
anim.start();
} else {
mShowAnswerButton.setVisibility(View.INVISIBLE);
}

PS:Build.VERSION.SDK_INT常量代表了Android设备的版本号。可将该常量同代表Lollipop版本的常量进行比较

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值