关于Android中开机启动服务

最近在项目中需要实现开机启动一个应用中的服务功能,果断在manifest中注册静态广播Receiver,

<receiver android:name=".broadcast.RestartServiceReceiver">
            <intent-filter>
                <action android:name="com.centerm.lklapplicationshop.restartservice"/>
                <action android:name="android.intent.action.BOOT_COMPLETED"/>
            </intent-filter>
        </receiver>

记得在manifest中添加相应权限,

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

运行后,强制停止应用,然后重启。结果开机后并没有启动服务。检查代码没什么问题,一番纠结后,终于找到了原因:

原来,在3.1之后,系统的PackageManager增加了对处于“stopped state”应用的管理,这里的stopped和Activity生命周期中的stop状态是两回事,

PackageManager中“stopped state”指的是安装后从来没有启动过或者被用户强制停止的应用,系统中通过两个flag

FLAG_INCLUDE_STOPPED_PACKAGESFLAG_EXCLUDE_STOPPED_PACKAGES ,来标识一个intent是否激活处于“stopped state”的应用,当两个Flag都不设置或者都进行设置的时候,采用的是FLAG_INCLUDE_STOPPED_PACKAGES的效果。有了上面的新机制之后,Google觉得给所有的广播intent默认加上FLAG_EXCLUDE_STOPPED_PACKAGES会非常的Cool,能在一定程度上避免流氓软件、病毒啊干坏事,还能提高效率,就导致了RECEIVE_BOOT_COMPLETED广播如果用户没有运行过应用或者在设置中强行停止了应用,就不会接收到BOOT_COMPLETED广播。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值