onTaskRemoved()未在HUAWEI和XIOMI设备中调用

Alo*_*ski 32 service android huawei

我一直onTaskRemoved()在服务中使用方法来检测应用程序从设备最新列表中删除的时间.我预先形成一些日志记录和其他需要在发生这种情况时发生的操作.它完美地运作.

然后我在运行Android 6.0的HUAWEI设备上检查了这个方法.该方法永远不会被调用.我还添加了一个Log.d调用,正如预期的那样,这个日志从未出现过.在XIOMI设备上也是如此.

任何想法为什么会发生以及如何解决这个问题?或者有没有另一种方法来检测应用程序是否已从RECENT列表中删除而不依赖onTaskRemoved()

谢谢

Dav*_*ser 28

在某些设备(某些LG,华为,小米和其他设备)上,您的应用需要手动添加到"受保护的应用"或"允许在后台运行的应用"列表中,以便Android重新启动STICKY服务.如果您的应用尚未手动添加到此列表中,则Android会终止您的进程并且不会重新启动它们,也不会调用onTaskRemoved().这样做是为了通过限制可以在后台运行STICKY服务的应用程序数量来延长电池寿命.

在这些设备上,您应该在"设置"中看到一个页面,有时在"电源管理"下,有时在其他地方,您需要显式添加您的应用程序.您还需要告知用户明确将您的应用添加到此列表中.

  • @TosinJohn这些公司与制造商达成协议,以允许其应用“已预先批准”此功能。无论如何,这些应用通常通常都预先安装在设备上。 (2认同)

Vis*_*sad 15

当用户在xiaomi设备上安装您的应用程序时,将用户重定向到自动启动活动并告诉用户打开:

if (Build.BRAND.equalsIgnoreCase("xiaomi")) {
                Intent intent = new Intent();
                intent.setComponent(new ComponentName("com.miui.securitycenter", "com.miui.permcenter.autostart.AutoStartManagementActivity"));
                startActivity(intent);
            }
Run Code Online (Sandbox Code Playgroud)

使用上面的代码在xiaomi上启动自动启动活动页面


W4R*_*0CK 6

我一直在Service中使用onTaskRemoved()方法来检测某个应用何时从设备“最近”列表中删除,方法是将其刷掉。

通过更多地阐明David Wasser提供的答案

这在小米上并不陌生,因为小米具有一项称为应用程序许可的功能,用户必须允许该应用程序自动启动(服务)。在您的情况下Service,一旦从堆栈终止,就不会调用。

像这样,并允许您的应用自动启动:

Settings > permissions > Autostart