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

时间:2016-11-17 16:32:43

标签: android service huawei

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

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

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

由于

5 个答案:

答案 0 :(得分:23)

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

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

答案 1 :(得分:13)

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

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

使用以上代码在xiaomi

上启动自动启动活动页面

答案 2 :(得分:5)

  

我一直在服务中使用onTaskRemoved()方法来检测应用程序是否已从设备的最新列表中删除了。

更清楚地了解David Wasser

提供的答案

小米没有新功能,因为小米有一项名为app permission的功能,用户必须允许该应用自动启动(服务)。在您的情况下,Service一旦从堆栈终止就不会被调用。

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

Settings > permissions > Autostart

答案 3 :(得分:3)

在我的华为中我也面临着问题,只需去设置=>省电=> Protect App =>找到你的应用并启用它。服务将开始运行..

答案 4 :(得分:1)

免责声明:这不是一个好的解决方案..这是黑客

您可以阻止用户杀死应用

在你的清单中 - >内部活动标签 - >添加以下行

  

机器人:excludeFromRecents = “真”

您的应用最近的应用历史记录中未显示。因此用户无法杀死该应用。