如何处理Android中不推荐使用的类以保持兼容性
||
当我将所有东西都围绕Android 2.2 Froyo构建时,我将重新使用我之前使用的应用程序。
我已经为最新的API更新了我的SDK,并注意到不赞成使用我使用的ClipboardManager功能。我更新了代码以使用更新的ClipData模型,并在Froyo手机上对其进行了尝试,当然,在新代码中我收到了NoClassDefFoundError。
我已经看过SO了,还没有找到有关维护向后兼容性的通用策略的任何真正讨论。
我不确定要如何处理这种情况以及API不同的其他情况,因为我希望所有版本的用户都可以使用我的应用。
我应该做如下检查吗?
if(version == old){
use old API;
} else {
use new API;
}
如果是这样,我在我的课程中已经弃用了代码,Eclipse将永远在那儿发出警告。
另一方面,我可以针对旧版本的API进行构建,并希望新版本可以正常运行。但是,当有更好的选择时,我冒着针对bug或低性能代码进行构建的风险。
处理此问题的最佳方法是什么?
没有找到相关结果
已邀请:
4 个回复
挂帘妈乡
现在getExternalFilesDir()仅在API级别8或更高版本上可用,因此如果他们有(Froyo),我想使用它,但否则我需要其他方法。 现在,我对可以继续尝试使用的方法进行了测试:
希望可以帮助和捷径很多谷歌搜索:-) 附言如果在其他情况下仍要使用已废弃的方法,则只需在其上方添加
注释即可。这将消除警告,并且由于正确的原因而做了此操作,因为您尽可能使用最新的API。
厢界山攀
然后,您可以使用不同版本的android SDK提供此抽象类的不同实现。 这种方法有些不同寻常的是,它是一种工厂设计模式,结合了单例设计模式。要求所有子类都是单例并提供静态getInstanceMethod。此抽象类的factory方法将尝试加载实现此接口的类。如果失败,则可以将需求降级为实现服务并基于较旧的APIS的类。 这是使用此接口发送邮件和短信的类的示例。专为Android SDK 7设计。
您也可以提供其他选择。尝试一个接一个地加载它们,降序为android版本号。 使用Messenger服务非常简单:
如果为空,则没有匹配的服务。如果不为null,则通过MessageManager定义的接口使用。 通过包括实现的基础版本号,并构建一个小型总线以正确的顺序一个接一个地加载类,可以扩展该技术,甚至使其变得更干净。 欢迎所有反馈。 问候, 斯特凡
殿虫
如您所见,代码部分:
仅适用于Android 3.0和更高版本,如果您希望此代码至少可用于Jelly Bean(Android 4.1),请使用:
VERSION.SDK_INT框架的用户可见SDK版本;这是可能的 值在Build.VERSION_CODES中定义。 有关更多信息:Build.VERSION 而且您可以在此处查看VERSION_CODES的状态信息:Build.VERSION_CODES
拈吉勉犬姆