关于APP进程被杀死,极光推送收不到消息的解决办法

更新博文:进程被杀死的情况下,还想收到推送消息,现在需要走厂商渠道了。

推送是每一个APP必不可少的一部分,这几天正好在做这一块,所以总结一下遇到的一些问题。在APP被杀死的情况下,对应的推送service也一起被杀死了,这个时候我们怎么能够收到后台的推送呢?网上有很多关于这方面的办法,像什么给服务设置成一个独立的子进程啊,设置守护进程啊,本人亲测,没有什么卵用。像MIUI啊,360这些,分分钟给你干掉。下面我就说一下,我是怎么解决这个问题的。第一个解决办法:将你的APP设置成白名单应用,或者允许自启动。具体的做法,各个安卓系统的操作方式不同,请自行百度。其实这样做的原理就是保证你的APP不会被真正杀死,但是用户肯定不会这样去设置吧,而且毫无用户体验感。第二个解决办法很简单,但是也特别粗暴,在mainfest中给application设置这个属性android:persistent="true",看意思我们就知道,持续的,一直的,这样的话,app是杀不死的,推送肯定有可以收到了。但是强烈建议不要这样做,因为这样就像某些流氓软件一样了,毕竟我们做个应用出来,也不想让别人以为我们的是流氓软件吧。好了,重头戏来了,最后一种方法,也是我比较推荐的一种。用Broadcast Receivers。我们都知道,推送实际上应用的就是广播,这里我们自定义一个广播接收器,让它继承系统的Broadcast Receivers,然后复写它的onReceive方法,在onReceive里面开启推送的服务。最后在mainfest中去注册我们自定义的广播接收器。这里一定要用静态注册的广播接收器。如果是动态注册的,APP被杀死后,广播接收器也会被杀死。下面我已极光推送为例。

//自定义的接收器

public class BoardcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
     Intent pushintent=new Intent(context,PushService.class);//启动极光推送的服务
        context.startService(pushintent);
    }
}

//静态注册接收器

 

              android:name="BoardcastReceiver"
            android:enabled="true">
            
                
                
                
                
                
                
                
                
                
                
                
                
                
            

        

OK!大功告成,5.0和6.0以及7.0手机上亲测成功。这是我第一次写博客,有什么说的不对的,还请大家指正。

 

 

你可能感兴趣的:(android,极光推送,安卓)