栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

是否可以仅根据Android OS版本加载特定的代码行?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

是否可以仅根据Android OS版本加载特定的代码行?

是的,你可以这样做。实际上,有不止一种方法。(请注意:此答案的唯一Android特定部分是您查找平台版本的方式。)

假设该类在版本2.0及更高版本中

X
具有方法
void y()
,但以前没有。

调用该方法而不引入任何编译时相关性的一种方法是使用反射来定位方法并对其进行调用

invoke
。例如:

X x = ...if (BUILD.VERSION.RELEASE.compareTo("2.0") >= 0) {    // (exception handling omitted ...)    Method m = c.getClass().getDeclaredMethod("y");    m.invoke(x);}

另一种方法是为您的应用程序创建版本兼容性适配器API,如下所示:

interface Compat {    void doY();}class CompatV1 {    public void y(X x) {       // do nothing    }}class CompatV2 {    public void y(X x) {       x.y();    }}// // Code to instantiate the relevant adapter for the current platform.//Class<?> compatClass;// (Exception handling omitted)if (BUILD.VERSION.RELEASE.compareTo("2.0") < 0) {    compatClass = Class.forName("...CompatV1");} else {    compatClass = Class.forName("...CompatV2");}// (Exception handling omitted)Compat compat = (Compat) compatClass.newInstance();// The adapter object can be passed around as a parameter, wrapped// as a singleton or injected using dependency injection.// Invoke X.y() as follows:X x = ...compat.y(x);

第二个版本看起来有点重量级,但是它的优点是动态(慢速,非类型安全的)代码仅执行一次,并且版本特定的代码与其余代码隔离。在现实生活中,您可能会将许多方法放入适配器接口。

这种方法需要更多的思考,才能弄清楚如何设计兼容性API,以便将版本依赖性与其余代码完全隔离。您可能还必须修改适配器API,并为每个新的(不兼容的)主要版本创建新的适配器类。

最后,如果需要更改平台API以适应新的版本中 删除 的旧版本中使用的类或方法,则需要

CompatV*
使用不同的Android SDK
编译各种适配器类(例如,这些类)。这将使您的构建过程变得更加复杂。


有关此问题的其他“建议”,请阅读Android博客上的以下文章:

  • Android应用程序的向后兼容性
  • 如何也要吃(杯子)蛋糕。


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/515346.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号