在应用程序启动时,应用程序启动应该执行某些网络任务的服务.

原因:java.lang.IllegalStateException:不允许启动

据我所知,它与:

startService()方法现在在以下情况下引发IllegalStateException 针对Android 8.0的应用程序try 在以下情况下使用该方法 不允许创建后台服务.

"in a situation when it isn't permitted"-它实际上是什么意思??以及如何修复它.我不想将我的服务设置为"前台"

推荐答案

允许的情况是临时白名单,其中后台服务的行为与Android O之前相同.

在某些情况下,后台应用程序会被放置在临时白名单上几分钟.当一个应用程序在白名单上时,它可以不受限制地启动服务,并且其后台服务被允许运行.当应用程序处理用户可见的任务时,会将其置于白名单上,例如:

  • 处理高优先级Firebase云消息(FCM)消息.
  • 接收广播,例如SMS/MMS消息.
  • 从通知中执行挂起事件.
  • 在VPN应用程序将自身提升到前台之前启动VpnService.

资料来源:https://developer.android.com/about/versions/oreo/background.html

换句话说,如果你的后台服务不符合白名单的要求,你必须使用新的JobScheduler.它基本上与后台服务相同,但它会定期被调用,而不是在后台连续运行.

如果您使用的是IntentService,则可以更改为JobIntentService.见@kosev's answer below.

Android相关问答推荐

如何允许我的应用程序在Android 10上运行,同时目标是API 33

如何在点击按钮时将字符串插入到文本字段中的光标位置?

Jetpack编写Lazy列滑动删除动画不顺利结束

显示本地房间数据库中未保存的项目的动态列表

如何阻止Gradle在编译时生成app-metadata.properties

用于小部件泄漏警告的伙伴对象中的Kotlin Lateinit

无法加载类';com.android.build.api.extension.AndroidComponentsExtension';

在Jetpack Compose中,我可以配置动画以恒定的速度而不是恒定的时间运行吗?

使用lazyColumn迁移paging3的旧代码

如何避免多次调用 Jetpack Compose 的 onClick 回调

我可以从 Android 中的选定文本中获取周围的文本吗?

具有管理员权限的 Kotlin 中的多用户系统

如何从包装在泛型中的 retrofit 调用中检索密钥?

未找到 com.android.tools.build:gradle:7.4.0 的匹配变体

来自位图的 WearOS 图标不显示 colored颜色

如何放置在柱子的角落(底端)

Jetpack Compose:SpanStyle 的 TextAlign(垂直居中)

Jetpack Compose:mutableStateOf 不随流量更新

Android Studio Emulator Internet 连接问题仅是第一次

Android Material Date Range Picker - 如何仅更改所选范围日期的文本 colored颜色 ?