是否有可能杀死" android:persistent = true"系统级应用?

时间:2016-06-29 20:52:58

标签: android

我有一个应用程序,它只是一个在启动时启动的服务。我正在系统级开发,所以我使用android:persistent=true以确保我的服务不会在内存压力下被杀死。

但是,我发现这可以防止我在任何条件下终止我的服务。我仍然希望能够自己杀死它 - 有没有办法做到这一点,或者它是不可能的因为" persistent = true"是在清单中定义的吗?

如果无法做到这一点,我还能如何保护我的过程免受内存压力下的死亡?我可以手动定义优先级吗?也许是oom_score或其他什么?

2 个答案:

答案 0 :(得分:5)

想出来。大多数停止服务的方法都不会阻止持久标志重新启动它。这包括stopService,killBackgroundService,甚至System.exit(0);

ActivityManagerService中有一个名为forceStopPackage的隐藏函数,您可以通过反射通过ActivityManager接口调用它。需要系统权限,但如果您使用持久性,则不应该是一个问题。

在清单中:

<uses-permission android:name="android.permission.FORCE_STOP_PACKAGES" tools:ignore="ProtectedPermissions"></uses-permission>

这会杀死进程。给它命名过程/包。

try {
        Class c;
        c = Class.forName("android.app.ActivityManager");
        Method m = c.getMethod("forceStopPackage", new Class[]{String.class});
        Object o = m.invoke(null, new Object[]{"com.your.process"});
    }catch (Exception e){
            Log.e(TAG, "Failed to kill service", e);
}

答案 1 :(得分:0)

android:persistent=true

适用于预加载的应用程序,不适用于下载的应用程序(例如来自Play商店的APP,从apk或AS安装) 建议使用前台服务方法 - 优先级最高的流程。 Official example hereAnother full-code example here