Android 9上的startService

问题描述 投票:0回答:1

根据api v26版本的android文档,我们不能使用startService。因此,我们应该检查版本,如果版本早于Oreo,则执行startService,否则执行startForegroundService。另一方面,我在我的android smarthpone(android PIE 9)旧应用程序“屏幕上的电话计数器”上安装了它,效果很好。然后,我对该项目进行反编译,发现该应用程序仅使用startService,因此对我来说旧应用程序不起作用。基于该应用程序,我构建了自己的项目,该项目具有完全相同的模式(通过startService运行服务,该服务注册和取消注册侦听动作android.intent.action.SCREEN_ON的接收器)。应用程序运行,服务启动,但是当我从菜单中杀死应用程序时,服务也被杀死了。

为什么Google商店中的某些旧应用程序可以在最新的android版本之一上使用非常老旧且不允许使用的代码?

android service broadcastreceiver
1个回答
0
投票

根据api v26版本的android文档,我们不能使用startService

不是the documentation所说的。它指出:

startService()方法现在会抛出IllegalStateException,如果针对Android 8.0的应用程序>试图在不允许创建后台服务的情况下尝试使用该方法。

(添加了重点,稍后我会再讲)

因此,我们应该检查版本,如果版本早于Oreo,则我们执行startService,否则执行startForegroundService。

[如果您要从后台启动该服务,则确实需要...对于新应用程序。

为什么Google商店中的某些旧应用程序可以在最新的android版本之一上使用非常老旧且不允许使用的代码?

显然,因为该应用多年未更新。它的targetSdkVersion仍然低于26。targetSdkVersion的存在是为了告诉Android应用程序适应了什么API级别。在这种情况下,如果targetSdkVersion低于26,则Android知道该应用未设置为使用startForegroundService(),因此Android的行为与旧版Android相似。

[请记住,如果您通过Play商店(和其他一些分发渠道)进行分发,则新的和更新的应用程序不能具有旧的targetSdkVersion。例如,现在(2020-03-14),Play商店要求targetSdkVersion为28或更高。

© www.soinside.com 2019 - 2024. All rights reserved.