From 29afb441d8775df0996256e4d4e33f3343444df8 Mon Sep 17 00:00:00 2001 From: LoveSy Date: Sat, 7 Aug 2021 20:18:07 +0800 Subject: [PATCH] [core] Clear activityThread cache (#867) --- .../lsposed/lspd/service/BridgeService.java | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/org/lsposed/lspd/service/BridgeService.java b/core/src/main/java/org/lsposed/lspd/service/BridgeService.java index 8feeda4f..bf941242 100644 --- a/core/src/main/java/org/lsposed/lspd/service/BridgeService.java +++ b/core/src/main/java/org/lsposed/lspd/service/BridgeService.java @@ -73,7 +73,7 @@ public class BridgeService { Log.i(TAG, "service " + SERVICE_NAME + " is dead. "); try { - @SuppressWarnings("JavaReflectionMemberAccess") + //noinspection JavaReflectionMemberAccess Field field = ServiceManager.class.getDeclaredField("sServiceManager"); field.setAccessible(true); field.set(null, null); @@ -91,10 +91,25 @@ public class BridgeService { Log.w(TAG, "clear ServiceManager: " + Log.getStackTraceString(e)); } + try { + //noinspection JavaReflectionMemberAccess + Field field = ActivityThread.class.getDeclaredField("sPackageManager"); + field.setAccessible(true); + field.set(null, null); + + //noinspection JavaReflectionMemberAccess + field = ActivityThread.class.getDeclaredField("sPermissionManager"); + field.setAccessible(true); + field.set(null, null); + Log.i(TAG, "clear ActivityThread"); + } catch (Throwable e) { + Log.w(TAG, "clear ActivityThread: " + Log.getStackTraceString(e)); + } + bridgeService.unlinkToDeath(this, 0); bridgeService = null; listener.onSystemServerDied(); - new Thread(()-> sendToBridge(serviceBinder, true)).start(); + new Thread(() -> sendToBridge(serviceBinder, true)).start(); } };