oppo-coloros、vivo-funtouch os、小米-MIUI os等定制操作系统新推出的设备,如何保护后台服务/报警被杀?

Posted

技术标签:

【中文标题】oppo-coloros、vivo-funtouch os、小米-MIUI os等定制操作系统新推出的设备,如何保护后台服务/报警被杀?【英文标题】:How to protect background service/alarms to be kill in newly launched devices in customized OS like oppo - coloros, vivo-funtouch os, Xiomi-MIUI os? 【发布时间】:2017-06-07 19:52:45 【问题描述】:

我有一个WakefulBroadcastReceiverIntentService,每隔半小时就会发出警报并做一些事情。 我已经用setExactAndAllowWhileIdle() 方法处理了打盹模式。

最近上市的一些带有定制操作系统的新智能手机都有自己的定制操作系统 基于安卓操作系统。比如OPPO用color os,vivo用funtouch os,xiomi用MIUI os。在操作系统中 有清除内存的功能。他们有一键清除记忆选项。例如,如果用户清除最近的应用程序列表 或从最近的应用列表中删除应用,应用的所有后台服务以及所有警报都将被终止。

如何使用这些新操作系统?

【问题讨论】:

您在这个问题上找到任何可行的解决方案吗? 终止服务的唯一“正确”方法是进程终止 (SIGTERM) 和程序停止。如果您的服务从 onCreate 返回 START_SICKY 应该在进程终止后自动重新启动,并且可以通过覆盖 onTaskRemoved 和/或 onDestroy 来处理编程停止,如果这不起作用,那可能意味着该服务(以及整个应用程序)和它)已放入"stopped state"。在这种情况下,应对它的方法应该是相同的。 @himCream 你找到解决这个问题的办法了吗 @Dev 是的,这有点像手动解决方案......我们需要根据设备类型从用户设备进行一些手动设置......常见的设置是让应用程序在设备中列入白名单...... 【参考方案1】:

对于MIUI手机,您需要关闭省电模式,然后您的应用才能在后台运行。

过程:转到设置-> 电池-> 管理应用的电池使用情况-> 点击关闭或选择您的应用

以编程方式

 Intent intent = new Intent();
 intent.setClassName("com.miui.powerkeeper",
        "com.miui.powerkeeper.ui.HiddenAppsContainerManagementActivity");
 startActivity(intent);

对于 Oppo 设备,请执行以下步骤:

    设置-> 电池 -> 您的应用-> 禁止这两个选项

以编程方式

Intent intent = new Intent();
intent.setClassName("com.coloros.oppoguardelf",
       "com.coloros.powermanager.fuelgaue.PowerConsumptionActivity");
startActivity(intent);
    安全-> 隐私权限-> 启动管理器-> 允许您的应用

以编程方式

Intent intent = new Intent();
intent.setClassName("com.coloros.safecenter",  
       "com.coloros.safecenter.permission.startup.StartupAppListActivity");
startActivity(intent);
    最近应用的标签锁定应用,方法是向下拖动。

这对我有用,希望这对你也有用:)

【讨论】:

Try this solution for xiaomi, oppo and vivo phones. Autostart screen will be launched if it exists OPPO 解决方案仅适用于 android 版本 5.1.1,不适用于棉花糖 这个解决方案似乎对设备来说非常具体 【参考方案2】:

如果您的应用因从最近的应用列表中清除而被终止,您可以覆盖 android.app.Service.onTaskRemoved() 以安排应用重启或类似操作。

在用户明确采取行动终止您的应用的所有其他情况下(例如,从设置中执行“强制停止”)--- 就这样吧。不要试图解决这个问题。用户想要杀死你的应用程序。让它死掉,并在用户下次再次启动应用程序时恢复功能。

【讨论】:

我使用过 onTasRemoved() 但它仅在用户清除特定应用程序时调用,但在用户从最近的任务列表中清除所有应用程序时不调用.....而且我也注意到当我一段时间后强制关闭 Facebook 或 whatsapp 我可以在设置的“运行服务”选项卡中看到服务重新启动... 这不是重点。如果用户想杀死你的应用,你不应该试图去反对它 我明白你的意思,但我没有问题如果用户“强制关闭”我的应用程序,但是如果用户从“最近的应用程序列表”中清除应用程序并且服务已被终止,所有警报已被取消,如何处理。 ...这实际上是我关心的问题?【参考方案3】:

尝试在不同的进程中运行您的服务。

<service android:name=".YourBackgroundService"
        android:process=":service">

【讨论】:

以上是关于oppo-coloros、vivo-funtouch os、小米-MIUI os等定制操作系统新推出的设备,如何保护后台服务/报警被杀?的主要内容,如果未能解决你的问题,请参考以下文章