问题详述
我集成了移动推送SDK后将设备重启,为什么我的App没有启动,而其他好多App都启动了?
问题原因
操作系统在启动的时候会发出一个“BOOT_COMPLETED”的系统广播,该广播会发送到该广播的所有广播接收器。但是在Android 3.1中,Google为广播增加了FLAG_INCLUDED_STOPPED_PACKAGES和FLAG_EXCLUDED_STOPPED_PACKAGES两个参数用来标识是否将该广播发送到处于停止状态的应用所持有的接收器。系统广播设置了FLAG_EXCLUDED_STOPPED_PACKAGES参数,所以如果应用程序处于停止状态,即使监听启动广播也无法接收到。这一点不仅针对系统启动广播,针对所有的系统广播都一样。需要指出的是,这里的停止状态和Activity生命周期中的stop状态是完全不一样的,包管理器中的stopped state指的是安装后从来没有启动过或者是被用户手动强制停止的应用。判断一个应用程序是否处于停止状态可以在手机中“设备—》应用程序—》XXAPP”中查看。如果该应用的“强行停止”按钮已经变灰,说明该应用已经被强行停止,处于stop状态。另外还有一种情况可以导致应用无法自启动,即如果当前App安装在SD卡,因为系统启动的逻辑是先发出“BOOT_COMPLETED”广播之后再挂载SD卡。
文档内容是否对您有帮助?