通常我们把应用杀死后就无法收到推送的消息,需要重新打开应用才能够收到推送的消息。我们可以通过设置“自启动管理”,允许应用自启动,达到杀死应用也可以接收到推送消息的目的。在这里举例红米3S手动开启应用的“自启动”权限步骤:打开设置→授权管理→自启动管理→在“禁止应用自启动”中开启你要“自启动”的应用。当然,我们在开发APP的时候不可能让用户这样一步一步去操作,所以我们可以通过代码直接打开“自启动管理”界面。

public class MainActivity extends AppCompatActivity {

    public static final String SYS_EMUI = "sys_emui";
    public static final String SYS_MIUI = "sys_miui";
    public static final String SYS_FLYME = "sys_flyme";
    private static final String KEY_MIUI_VERSION_CODE = "ro.miui.ui.version.code";
    private static final String KEY_MIUI_VERSION_NAME = "ro.miui.ui.version.name";
    private static final String KEY_MIUI_INTERNAL_STORAGE = "ro.miui.internal.storage";
    private static final String KEY_EMUI_API_LEVEL = "ro.build.hw_emui_api_level";
    private static final String KEY_EMUI_VERSION = "ro.build.version.emui";
    private static final String KEY_EMUI_CONFIG_HW_SYS_VERSION = "ro.confg.hw_systemversion";
    private static final String TAG = "MainActivity";

    private Button mStart;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mStart = (Button) findViewById(R.id.btn);
        
        getSystem();//获取当前手机操作系统

        mStart.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                openStart(MainActivity.this);//打开"自启动管理"界面
            }
        });
    }

    /** 获取当前手机操作系统  */
    public static String getSystem(){
        String SYS = null;
        try {
            Properties prop= new Properties();
            prop.load(new FileInputStream(new File(Environment.getRootDirectory(), "build.prop")));
            if(prop.getProperty(KEY_MIUI_VERSION_CODE, null) != null
                    || prop.getProperty(KEY_MIUI_VERSION_NAME, null) != null
                    || prop.getProperty(KEY_MIUI_INTERNAL_STORAGE, null) != null){
                SYS = SYS_MIUI;//小米
                Log.d(TAG,"小米");
            }else if(prop.getProperty(KEY_EMUI_API_LEVEL, null) != null
                    ||prop.getProperty(KEY_EMUI_VERSION, null) != null
                    ||prop.getProperty(KEY_EMUI_CONFIG_HW_SYS_VERSION, null) != null){
                SYS = SYS_EMUI;//华为
                Log.d(TAG,"华为 ");
            }else if(getMeizuFlymeOSFlag().toLowerCase().contains("flyme")){
                SYS = SYS_FLYME;//魅族
                Log.d(TAG,"魅族");
            }else{
                Log.d(TAG,"其他11");
            }
        } catch (IOException e){
            e.printStackTrace();
            Log.d(TAG,"其他22");
            return SYS;
        }
        return SYS;
    }

    public static String getMeizuFlymeOSFlag() {
        return getSystemProperty("ro.build.display.id", "");
    }

    private static String getSystemProperty(String key, String defaultValue) {
        try {
            Class<?> clz = Class.forName("android.os.SystemProperties");
            Method get = clz.getMethod("get", String.class, String.class);
            return (String)get.invoke(clz, key, defaultValue);
        } catch (Exception e) {
        }
        return defaultValue;
    }

    /** 打开"自启动管理"界面 */
    public void openStart(Context context){
//        if(Build.VERSION.SDK_INT < 14){
//            Toast.makeText(this,"版本太低",Toast.LENGTH_SHORT).show();
//            return;
//        }
        String system = getSystem();
        Intent intent = new Intent();
        if(system.equals(SYS_EMUI)){//华为
            ComponentName componentName = new ComponentName("com.huawei.systemmanager","com.huawei.systemmanager.startupmgr.ui.StartupNormalAppListActivity");
            intent.setComponent(componentName);
        }else if(system.equals(SYS_MIUI)){//小米
            ComponentName componentName = new ComponentName("com.miui.securitycenter", "com.miui.permcenter.autostart.AutoStartManagementActivity");
            intent.setComponent(componentName);
        }
        try{
            context.startActivity(intent);
        }catch (Exception e){//抛出异常就直接打开设置页面
            intent=new Intent(Settings.ACTION_SETTINGS);
            context.startActivity(intent);
        }
    }
}


------------------------------------------------------------------------------------------------------------------------

下面是常用手机厂商的设置方法:

小米【MIUI】  
自启动管理:需要把应用加到【自启动管理】列表,否则杀进程或重新开机后进程无法开启  
通知栏设置:应用默认都是显示通知栏通知,如果关闭,则收到通知也不会提示  
网络助手:可以手动禁止已安装的第三方程序访问2G/3G和WIFI的网络和设置以后新安装程序是否允许访问2G/3G和WIFI的网络  
MIUI 7 神隐模式: 允许应用进行自定义配置模式,应用在后台保持联网可用,否则应用进入后台时,应用无法正常接收消息。【设置】下电量和性能中【神隐模式】  
华为【Emotion】  
自启动管理:需要把应用加到【自启动管理】列表,否则杀进程或重新开机后进程不会开启,只能手动开启应用  
后台应用保护:需要手动把应用加到此列表,否则设备进入睡眠后会自动杀掉应用进程,只有手动开启应用才能恢复运行  
通知管理:应用状态有三种:提示、允许、禁止。禁止应用则通知栏不会有任何提醒  
魅族【Flyme】  
自启动管理:需要把应用加到【自启动管理】列表,否则杀进程或重新开机后进程无法开启  
通知栏推送:关闭应用通知则收到消息不会有任何展示  
省电管理: 安全中心里设置省电模式,在【待机耗电管理】中允许应用待机时,保持允许,否则手机休眠或者应用闲置一段时间,无法正常接收消息。  
VIVO【Funtouch OS】  
内存一键清理:需要将应用加入【白名单】列表,否则系统自带的“一键加速”,会杀掉进程  
自启动管理:需要将应用加入“i管家”中的【自启动管理】列表,否则重启手机后进程不会自启。但强制手动杀进程,即使加了这个列表中,后续进程也无法自启动。  
OPPO【ColorOS】  
冻结应用管理:需要将应用加入纯净后台,否则锁屏状态下无法及时收到消息  
自启动管理:将应用加入【自启动管理】列表的同时,还需要到设置-应用程序-正在运行里锁定应用进程,否则杀进程或者开机后进程不会开启,只能手动开启应用