当前位置:   article > 正文

Android ANR终极解决 android.app.RemoteServiceException: Context.startForegroundService()

android.app.remoteserviceexception: context.startforegroundservice() did not

问题现象

android.app.RemoteServiceException: Context.startForegroundService() did not then call Service.startForeground()
  • 1

通过startForegroundService(Intent intent)启动服务时,如果服务没有及时(5s)使用startForeground()响应,那么就会报这个异常。

问题原因和解决

1. Service startForeground之前的代码过于复杂

在Service的 onCreate 或者 onStartCommand 里我们会调用startForeground 方法。很多时候我们都会构造一个Notification。

这里我们可以将构建Notification的时机提前,使用全局静态变量的方式构建好,然后再调用startForeground方法,Service里直接取即可。

2. UI线程(主线程)阻塞

因为Service的生命周期方法是在主线程中Handler调用的,所以,如果调用时主线程阻塞,则会引起ANR和崩溃。

如果是非常及时需要刷新或提示,非得立马调用startForegroundService的。我们可以手动排除调用时机前后的耗时方法。

如果不是及时方法,可以通过IDelHandler的方式进行处理。添加IdelHandler消息,当主线程稍微闲置时再调用startForegroundService

其他解决

网上还有很多解决方案。但都不是从根本上进行解决的。可能也有用,大家可以参考。我理解,解决问题还是要从根源上进行避免

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/384179
推荐阅读
相关标签
  

闽ICP备14008679号