关于start service Intent not found与android:directBootAware="true"属性的问题

在一个程序中设置了一下属性,

android:persistent="true"
android:directBootAware="true"

以上属性的含义分别为:
android:persistent=“true”,设置该程序为常启动程序,开机启动,并且异常崩溃后,重新自动启动;
android:directBootAware=“true”,允许程序在android未启动完成时期(解锁阶段)启动,现象上来看,在开机动画结束之前就可以启动,设置为false,则表示在开机动画完成后,launcher启动后才启动。

在App程序中的Application中执行了启动服务的操作:

Intent intent = new Intent();
intent.setClass(this,CarControlService.class);
this.startService(intent);

出现问题
然后开机后程序报错:

2019-11-04 17:01:51.599 2467-2467/com.ad.carcontrol I/CarControlApplication: onCreate,start CarControlService.
2019-11-04 17:01:51.600 1750-2030/system_process W/ActivityManager: Unable to start service Intent { cmp=com.ad.carcontrol/.CarControlService } U=0: not found

即未找到相关服务。

经过调查发现该服务已经在AndroidManifest.xml中注册了,但是为什么还是找不到呢?

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.ad.carcontrol">
    <application>
        <service
            android:name=".CarControlService"
            android:exported="true">
            <intent-filter android:priority="999">
                <action android:name="com.ad.carcontrol.CarControlService" />
            </intent-filter>
        </service>
    </application>
</manifest>

解决方法
将属性改为:
android:directBootAware=“false”

服务启动正常。

原因
设置属性android:persistent="true"和android:directBootAware="true"后,该app程序启动的非常早,导致Application中的onCreate()很早就开始执行了,而这个时候Android系统对AndroidManifest.xml中注册的服务扫描还没有完成,所以进行startService()的时候,会报错提示找不到服务。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sunxiaolin2016

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值