startForegroundService失败问题解决方法

在没有Activity的Service中运行时,遇到ANR错误:Context.startForegroundService()未及时调用Service.startForeground()。服务通过adb启动,尽管在onCreate中调用了startForeground,但服务仍被意外停止。分析日志发现,服务在10秒内未执行startForeground且被停止。由于找不到解决异常停止的方法,采用临时解决方案:先启动前台服务,然后立即再次启动服务以避免ANR。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

android studio运行 没有activity的service服务时,出现ANR。
ActivityManager: ANR in com.device.idea.study
PID: 14267
Reason: Context.startForegroundService() did not then call Service.startForeground(): ServiceRecord{64d96a1 u0 com.device.idea.study/.FirstService}

该服务是通过adb shell am start-foreground-service -n com.device.idea.study/com.device.idea.study.FirstService 来运行的,经过查资料得知startForegroundService运行后 10秒内没有调用 startForeground的话,会出现ANR。于是在service的oncreate中加入了startForeground的调用。

    @Override
    public void onCreate() {
        super.onCreate();
        Log.d(TAG, "on create");
        Notification notification = new Notification.Builder(getApplicationContext(), "study").build();
        Log.i(TAG, "startForeground");
        startForeground(1, notification);
    }

然后再次adb shell运行,依然出现上述报错,发现onCreate之后,10秒内还是没有调用到startForeground接口。仔细排查日志发现: onCreate之后立马被stop了。应用在没有完成启动前台服务之前不能调用stop 或 stopSelf。
在这里插入图片描述
网上没有找到异常stop的解决办法,并且该服务只是本地调测一下,因此想到一个投机取巧的方法:

adb shell am start-foreground-service -n com.device.idea.study/com.device.idea.study.FirstService

adb shell am startservice -n com.device.idea.study/com.device.idea.study.FirstService

调用start-foreground-service 之后的10秒内,再次调用startservice 命令。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值