android启动服务失败,提示:Unable to start service Intent { cmp=xxx/.xxx} U=0: not found。检查清单文件服务配置没有错,启动服务的方法也没错。
startService(Intent(this, TestService::class.java))
场景:我的程序是系统应用,运行于9.0,作为launcher使用,在application onCreate中启动服务。试过延迟启动服务和配置action和Package的方式启动服务同样报错。
最终发现清单文件里application配置了directBootAware属性,意思是允许程序在系统未启动完成时启动(解锁阶段),但是TestService却没有相关配置。因此当程序启动时服务是找不到的,通过配置以下属性解决问题:
<service android:name=".TestService"
android:directBootAware="true"
android:enabled="true"/>
- android:directBootAware:是否允许系统解锁设备之前运行服务,默认false
- android:enabled:系统是否可实例化service,默认true
另外出现的一个异常:
java.lang.IllegalStateException: SharedPreferences in credential encrypted storage are not available until after user is unlocked
这个错误会导致程序崩溃,原因设备未解锁前不可读取SharedPreferences数据。在配置了directBootAware属性后,在程序启动的时候、系统没准备好前去操作sp就会出现这个异常。
<application
android:defaultToDeviceProtectedStorage="true"
。。。。。/>
application 中配置defaultToDeviceProtectedStorage属性解决此问题。文章来源:https://www.toymoban.com/news/detail-514572.html
我遇到的情况是第二个问题存在导致程序不停闪退,因为是launcher,会被系统不停的重复拉起。导致实际上程序正常启动的时候系统已经准备好了,这个时候拉起服务是没有问题的。
也就是说不停的闪退导致恰好避开了服务无法拉起的bug。这里排查花费了好多时间,做个记录。文章来源地址https://www.toymoban.com/news/detail-514572.html
到了这里,关于android服务启动失败Unable to start service Intent U=0: not found的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!