Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android SDK版本_Android_Sdk - Fatal编程技术网

Android SDK版本

Android SDK版本,android,sdk,Android,Sdk,我对应用程序在不同的Android版本上启动时的行为感到非常困惑 假设我使用SDK级别4编译它。它是在代码中编译的,并且在使用SDK 10的手机上运行时,仍然使用旧的SDK 4,还是使用SDK 10 一个简单的例子是服务的setForeground()-方法,该方法已被弃用。如果我用SDK 10在手机上运行这样的代码,该函数会不会无效,或者它会使用SDK 4的版本 不推荐使用的onStart()也是如此。它是否将在SDK 10上被忽略,并将尝试调用onStartCommand() 如果有人能告诉

我对应用程序在不同的Android版本上启动时的行为感到非常困惑

假设我使用SDK级别4编译它。它是在代码中编译的,并且在使用SDK 10的手机上运行时,仍然使用旧的SDK 4,还是使用SDK 10

一个简单的例子是服务的
setForeground()
-方法,该方法已被弃用。如果我用SDK 10在手机上运行这样的代码,该函数会不会无效,或者它会使用SDK 4的版本

不推荐使用的
onStart()
也是如此。它是否将在SDK 10上被忽略,并将尝试调用
onStartCommand()

如果有人能告诉我这里会发生什么,为什么,我会很感激

它是在代码中编译的,并且在使用SDK 10的手机上运行时,仍然使用旧的SDK 4,还是使用SDK 10

SDK意味着软件开发工具包,因此设备不会使用SDK运行任何东西。另一方面,设备具有属于特定API的不同类型的操作系统

如果您运行一个使用SDK 4编译的构建,并在运行API 10的设备中运行它,它将使用新的API(称为向后兼容性)运行它


通常,SDK的较新版本支持不推荐的函数。它们中的大多数都会起作用,但你必须尽量不要使用它们。当然,在某些情况下,您别无选择,例如,您使用的方法已被弃用,但您正在使用的旧SDK中没有替代品。

您的服务只是编译字节码—具有自己的类以及对其他类和方法的引用。当它部署在较新的android版本上时,它(android,OS)会做任何它认为合适的事情——你在那里没有影响力。与其他基于java的系统一样,它将依赖适当的类名/包/接口,并尝试使用某些签名(参数和返回值)解析方法。如果它的行为是社会性的,它将首先检查是否有来自较新接口(即onStartCommand())的方法,如果该方法可用,则将调用它。然后它可能(或不)退回到旧方法。但通常情况下,您可以相信反向兼容性会保持相当长的时间

大多数手机上大多数不推荐的api调用都能正常工作。。。 但是,由于开发人员误用了setForeground()的事实(在不通知用户的情况下将服务设置到前台),一些(如给定的setForeground()示例)已被删除。因此,它们不会起作用。 不幸的是,没有支持和不支持的文档,所以这是一个尝试和错误的事情

此外,由于某些原因,不同的实现(电话制造商/型号)之间存在差异。 一个很好的例子是旧的Contacts APi(V2.0之前),它在一些使用Android 2.2/2.3的较新手机上工作,而在其他使用相同操作系统版本的手机上不工作。。。
最好的办法是不要使用不推荐的方法,并根据当前Android操作系统版本的流行程度进行调整(目前流行的版本是2.1、2.2、2.3.2、2.3.3:)。

它仍然不能回答我的问题。API函数可以编译成二进制,也可以在运行时从外部库导入。我想问的是,它是否会使用旧SDK中API版本的函数源代码。关键是调用setForeground是使用SDK 4中包含的版本,还是因为它已被弃用而无效。至于答案的最后一部分,请参考我在问题中提到的示例。API函数不是编译成二进制的,只是它们的调用。它们的运行时代码由主机系统提供。不推荐使用的方法仍然可用,但将来可能会出现。即使在这种情况下,您的应用程序也会一直运行,直到遇到不再可用的调用。这就是我所需要的。所以,当一个服务在手机上使用更新的API启动时,它会忽略onStart并尝试调用onStartCommand。“你能把它作为一个答案贴出来,这样我就可以接受了吗?”塞巴斯蒂安·诺瓦克(Sebastian Nowak)在克里斯蒂安的最后一段中没有描述这一点吗?