我一直在服务中使用onTaskRemoved()
方法来检测应用程序何时从设备最近列表中删除,通过滑动它。当发生这种情况时,我执行一些日志记录和其他一些需要执行的操作。
然后我在一台运行Android 6.0的华为设备上测试了这种方法。该方法永远不会被调用。我还添加了一个Log。D呼叫,正如所料,这个日志没有出现。在小米设备上也是如此。
知道为什么会发生这种情况以及如何解决这个问题吗?或者有没有另一种方法来检测应用程序从最近列表中删除,而不依赖于onTaskRemoved()
?
谢谢
在某些设备上(一些LG,华为,小米和其他),你的应用需要手动添加到"受保护的应用"或"允许在后台运行的应用"列表中,以便Android重新启动STICKY服务。如果你的应用程序没有被手动添加到这个列表中,Android只是杀死你的进程,不重启它们,也不调用onTaskRemoved()
。这样做是为了通过限制可以在后台运行STICKY服务的应用程序的数量来节省电池寿命。
在这些设备上,你应该在"设置"中看到一个页面,有时在"电源管理"下,有时在其他地方,你需要明确地添加你的应用程序。你还需要告诉你的用户明确地将你的应用添加到这个列表中。
当用户在小米设备上安装你的应用程序时,将用户重定向到自动启动活动并告诉用户打开:
if (Build.BRAND.equalsIgnoreCase("xiaomi")) {
Intent intent = new Intent();
intent.setComponent(new ComponentName("com.miui.securitycenter", "com.miui.permcenter.autostart.AutoStartManagementActivity"));
startActivity(intent);
}
使用上面的代码来启动小米的自动启动活动页面
我一直在服务中使用onTaskRemoved()方法来检测应用程序何时从设备最近列表中删除,通过滑动它。
为David Wasser提供的答案提供了更多的线索
这在小米上并不新鲜,因为小米有一个叫做应用程序权限的功能,用户必须允许应用程序自动启动(服务)。在您的示例中,一旦Service
从堆栈中终止,它就不会被调用。
像这样让你的应用程序自动启动:
Settings > permissions > Autostart
我的华为也遇到了问题,点击设置=>省电=>保护应用=>找到你的应用并启用它。