android - onCreate() 中的 startForeground() 与 onStartCommand()
问题描述
我遇到了从 Playstore 报告的大量异常。来自 Android P 的 RemoteServiceException。
我正在创建 android 前台服务,然后调用 startForegound(带通道)。
但 99.9% 只有 9.0(android P) 用户报告 RemoteServiceException。我检查了我是否为服务制作通知渠道。我还检查了我是否在 OREO 之后为 os 调用 startForegroundService。
每个代码都没有问题。
但是我发现我多次调用 startForegroundService() ,但服务的 onCreate() 在第一次创建时只调用了一次。所以 onCreate() 内部的 startForeground() 只被调用一次。
但是,如果我将 startForeground() 放在 onStartCommand() 中,那么它也会调用与我调用 startForegroundService() 一样多的次数。因为每当您调用 startService/startForegroundService 时也会调用它(即使已经创建了 Service 的实例)。
你认为这是异常的原因吗?
而 mboy 对https://stackoverflow.com/a/51251741/5343的评论 也说了类似的话。
解决方案
这里同样的问题。就我而言,当我更改 id 时,似乎可以解决这个问题。
前
startForeground(1, notification);
后
startForeground(100001, notification);
推荐阅读
- windows - Visual Studio 中的自定义构建工具给了我“系统找不到指定的路径”错误
- ios - 必须返回 MPRemoteCommandHandlerStatus 或将完成处理程序作为第二个参数
- python-3.x - 无法单击硒中的下拉元素
- java - 我可以在没有相对路径的情况下在 project.ecore 中引用 java.ecore 吗?但改用模块引用?
- linux - 如何轻松诊断由于访问未映射的 mmap 区域而导致的问题?
- mongodb - 有关 MongoDB 查询和导入的问题
- ios - SwiftUI - NavigationLink 内容加载过早
- c# - 如何使用 C# 在 monogodb 中将 bsondocument 转换为没有 bson 反序列化器的强类型对象
- javascript - 在 Ember 的本地存储中,对象属性的值没有被更改
- c++ - 如何修改代码打印出数组 v2