直接以目前项目为例来说明:
项目中的App有三个进程:App主进程、消息推送服务进程、文件传输服务进程;这里主要记录下消息推送这个无耻的进程,为何可以在App退出后和重启手机后仍旧可以推送消息。
消息推送服务进程:
<!-- 推送消息服务 -->
<service
android:name="com.xxxx.downloadprovider.notification.pushmessage.PushMsgService"
android:process="com.xxxx.pushmessage" >
</service>
在App主进程的AndroidManifest.xml中注册了一个广播接收器(BroadcastReceiver)用于在Android系统启动的时候获取重启/启动广播消息,且这个BrocastRecevier是处于一个独立进程中的,也就是说只要使用过这个App的话,就注册并初始化了一个这样的广播,而且是作为独立进程一直存在的,即使关了App也不会关闭这个独立进程。
<!-- for 推送消息服务开机自动启动BroadcastReceiver -->
<receiver
android:name="com.xxxx.downloadprovider.service.OsBootReceiver"
android:label="OsBootReceiver"
android:process="com.xxxx.pushmessage" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<category android:name="android.intent.category.HOME" />
</intent-filter>
</receiver>
在App第一次启动的时候,创建了这个处于独立进程中的消息推送通知,可以在App运行的过程中使用,等到App关闭后,这个独立进程一直存在,也就说仍旧可以接受消息推送;即使等到重启手机,仍旧有一个广播接收开机事件,接收到此开机事件后,启动消息推送通知。。。。就这样,只要用户使用了这个App一次,那么这个消息推送就一直存在。。。耗费用户的流量,必须手动的把这个进程关掉才行,但是只要重启手机,那么这个消息推送又他妈的会出现。。。。人生就是这么悲催。