I have an app that is just a service that launches on boot. I am developing at the system level, so I am using android:persistent=true
in order to ensure my service
Figured it out. Most methods of stopping the service will not stop the persistent flag from restarting it. This includes stopService, killBackgroundService, and even System.exit(0);
There is a hidden function called forceStopPackage
in ActivityManagerService that you can invoke through the ActivityManager interface by reflection. Requires system privileges, but that shouldn't be an issue if you are using persistent.
In Manifest:
This will kill the process. Give it name of process/package.
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);
}