是否有可能杀死一个“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