Le dernier blog parlait juste de tuer les processus, et vous constaterez que certains utilisent la méthode killBackgroundProcesses () pour les tuer. Dans ce cas, vous devez utiliser la méthode forceStopPackage () pour tuer de force le processus. Tout le monde trouvera que cette méthode n'existe pas lorsque mActivityManager.forceStopPackage () est utilisé. Jetons un œil au code source:
/**
* Have the system perform a force stop of everything associated with
* the given application package. All processes that share its uid
* will be killed, all services it has running stopped, all activities
* removed, etc. In addition, a {@link Intent#ACTION_PACKAGE_RESTARTED}
* broadcast will be sent, so that any of its registered alarms can
* be stopped, notifications removed, etc.
*
* <p>You must hold the permission
* {@link android.Manifest.permission#FORCE_STOP_PACKAGES} to be able to
* call this method.
*
* @param packageName The name of the package to be stopped.
* @param userId The user for which the running package is to be stopped.
*
* @hide This is not available to third party applications due to
* it allowing them to break other applications by stopping their
* services, removing their alarms, etc.
*/
public void forceStopPackageAsUser(String packageName, int userId) {
try {
ActivityManagerNative.getDefault().forceStopPackage(packageName, userId);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
}
/**
* @see #forceStopPackageAsUser(String, int)
* @hide
*/
public void forceStopPackage(String packageName) {
forceStopPackageAsUser(packageName, UserHandle.myUserId());
}
Il y a une balise @hide, car Google pense que c'est trop peu sûr, donc cette méthode ne peut pas être appelée normalement, alors que dois-je faire? Nous aurions dû penser à utiliser la réflexion pour obtenir cette méthode et l'appeler ensuite. (Notez que cette méthode doit être une application signée au niveau du système pour pouvoir appeler cette méthode)
ActivityManager mActivityManager = (ActivityManager) getActivity().getSystemService(Context.ACTIVITY_SERVICE);
Method method = null;
try {
method = Class.forName("android.app.ActivityManager").getMethod("forceStopPackage", String.class);
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try {
method.invoke(mActivityManager, packageName); //packageName是需要强制停止的应用程序包名
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
Si vous ne savez pas comment obtenir le nom du package d'application, veuillez consulter mon dernier blog: http://blog.csdn.net/qq77485042/article/details/76241102
Dans le prochain blog, je partagerai comment pousser mon application vers le système / application et définir mon application en tant qu'application au niveau du système.
S'il y a des omissions ou des erreurs, veuillez laisser un message pour en discuter.