是否有可能杀死一个“android:persistent = true”系统

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

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

如果这是不可能的,我还有什么可以保护我的过程免受内存压力下的死亡? 我可以用手定义优先权吗? 也许是oom_score还是什么?


弄清楚了。 大多数停止服务的方法都不会阻止持久标志重新启动它。 这包括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);
}

android:persistent=true

适用于预先加载的应用程序,不适用于下载的应用程序(例如Play商店中的APP,从apk或AS安装)建议使用前台服务方法 - 最高优先级的进程。 这里的官方例子,这里的另一个完整代码示例

链接地址: http://www.djcxy.com/p/34963.html

上一篇: Is it possible to kill a "android:persistent=true" system

下一篇: Cannot create new project in Firebase console