onDestroy() onTaskRemoved 两者都不能在 Redmi MI 设备上运行

Posted

技术标签:

【中文标题】onDestroy() onTaskRemoved 两者都不能在 Redmi MI 设备上运行【英文标题】:onDestroy() onTaskRemoved both not working on Redmi MI device 【发布时间】:2019-02-12 18:48:16 【问题描述】:

我在这里开发了一个基于混合 Cordova 的 android 应用程序,在该应用程序中我需要在杀死应用程序之前执行一些任务,为此我在 MainActivity 中的代码 onDestroy() 和在 Samsum 上完美调用的服务类之一中编写了 onTaskRemoved,摩托罗拉、华硕等很多设备,除了红米手机。

前几天,相同的代码在 MI 设备中运行,但现在在使用 MIUI 9.6.0 及更高版本更新 MI 后就不行了。我已经用 MI 9.5.0 测试了一台 MI 设备,它可以同时使用两种方法,但是在我的设备升级后它现在不工作了。

那么有人有同样的问题吗?我们可以做些什么来实现应用程序杀戮事件?是否有任何选项可以通过它开始工作或有任何其他方式只为 MI 设备做同样的事情?

我已通过互联网检查并更改了自动启动选项,但仍然无法正常工作。

@Override
    public void onTaskRemoved(Intent rootIntent) 
        Log.d(getClass().getName(), "App just got removed from Recents!");
        Toast.makeText(getApplicationContext(),"18. onTaskRemoved()", Toast.LENGTH_SHORT).show();
    
    @Override
    public void onDestroy() 
        super.onDestroy();
        Toast.makeText(getApplicationContext(),"16. onDestroy()", Toast.LENGTH_SHORT).show();
    

【问题讨论】:

在我的小米 S2 8.1 上也发生了同样的事情。 onTaskRemoved 和 onDestroy 方法都没有被触发。 看看这个:LINK 【参考方案1】:

包括 (RedMi) 在内的少数 OEM 为电池/内存优化定制堆栈 ROM,并阻止了“onDestroy()”和“onTaskRemoved”回调。 作为用户,您可以通过锁定应用程序来防止应用程序的服务被杀死。 或者,通过为应用程序启用“自动启动”设置将应用程序列入白名单。您可以通过编程方式提示用户启用应用程序的自动启动:Please find details here

请注意:我已经在少数设备上以编程方式测试了自动启动启用,但发现它并不总是有效。所以不确定如何以正确的方式修复,但这个解决方案可能至少在一定程度上有效。

【讨论】:

以上是关于onDestroy() onTaskRemoved 两者都不能在 Redmi MI 设备上运行的主要内容,如果未能解决你的问题,请参考以下文章

Android 11 - 按下主页按钮时触发前台服务 onTaskRemoved

Android Oreo onTaskRemoved 事件不起作用(Android 版本 Oreo)

服务的 onDestroy() 回调

在 onDestroy 中进行所有清理是不是安全?

如何防止 onPause() 之后调用 onDestroy()?

Realm 实例未在 Activity#onDestroy 上关闭