Android 前台服务崩溃RemoteServiceException

博客分析了一起在Android系统中导致高崩溃率的问题,该问题是由于在启动前台服务后,耗时操作超过了5秒限制,未能及时调用`startForeground()`。通过Bugly崩溃报告、机型分析和代码调整,发现在所有初始化后添加短暂延迟可以复现并解决问题。参考链接提供了服务启动的详细流程。
摘要由CSDN通过智能技术生成

RemoteServiceException

查询分析Bugly上面的异常崩溃,发现这个bug导致的崩溃率占所有崩溃中的77%,影响次数率0.2%,是个崩溃率相当高的bug。

一、分析

1、根据服务的特性可以知道,在8.0以后,启动服务需要启动前台服务

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
   
            startForegroundService(intent);
            Log.i("ForgroundService","startForegroundService!!");
        } else {
   
            startService(intent);
        }

在service中需要启动

 startForeground(1, mBuilder.build());  //id不为0

2、初步判断可能是有些地方启动服务时,没有针对8.0以上版本做适配,全局搜索后发现所有启动服务的地方都做了适配,因此排除这个可能

3、再次到bugly找日志信息,发现除了Context.startForegroundService() did not then call Service.startForeground()这句有用信息外,没有其它异常信息可以帮助到。继续查看崩溃的机型,发现某些特定机型,崩溃率比较高。但在本地环境中还是无法复现

4、网上寻找答案,突然看到这句有用信息
在这里插入图片描述
看到这句“there is a delay between the startForegroundService() call and when the service actually starts” 服务启动是有延迟的,看到这里感觉看到bug有复现之法了。

5、查看bugly崩溃发生的时间,一般应用启动的8秒内,因此怀疑是在初始化的时候,发生的。查看Application。有一处启动服务的调用,看着都挺正常。只是启动服务的时候是放在各种初始化的靠前位置,因此我在所有初始化调用后,睡眠了三秒。崩溃复现!!!在这里插入图片描述
6、后续自己写了小demo,直接就是启动服务,然后等待5秒,服务的onCreate 和onStartCommand都是等待结束后才开始执行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值