onTaskRemoved() 在华为和小米设备中未被调用

onTaskRemoved() not getting called in HUAWEI and XIAOMI devices

我一直在服务中使用 onTaskRemoved() 方法来检测应用程序何时从设备的“最近”列表中删除,方法是将其滑走。当发生这种情况时,我会执行一些日志记录和其他一些需要进行的操作。 它完美运行。

然后我在一台华为设备运行 Android 6.0上查看了这个方法。 该方法永远不会被调用。我还添加了一个 Log.d 调用,正如预期的那样,此日志从未出现。在小米设备上也会发生同样的情况。

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

谢谢

在某些设备(某些 LG、华为、小米等)上,您的应用需要手动添加到 "protected apps" 或 "apps that are allowed to run in the background" 列表中,以便 Android重新启动粘性服务。如果您的应用程序尚未手动添加到此列表,Android 只会终止您的进程,不会重新启动它们,也不会调用 onTaskRemoved()。这样做是为了通过限制可以在后台提供 STICKY 服务 运行 的应用数量来延长电池寿命。

在此类设备上,您应该会在 "Settings" 中看到一个页面,有时在 "power management" 下,有时在其他地方,您需要在其中明确添加您的应用程序。您还需要告诉您的用户将您的应用明确添加到此列表中。

I've been using onTaskRemoved() method in a Service to detect when an app was removed from device RECENT list by swiping it away.

David Wasser

提供的答案提供更多信息

这在小米并不新鲜,因为小米有一个叫做应用权限的功能,用户必须允许应用自动启动(服务)。在您的情况下,一旦从堆栈中终止,就不会调用 Service

像这样让您的应用程序自动启动:

Settings > permissions > Autostart

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

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

使用以上代码在小米

上启动自动启动activity页面

在我的华为中我也遇到了问题,只需进入设置=>省电=>保护应用程序=>找到你的应用程序并启用它..服务将启动运行..