[core] Clear activityThread cache (#867)

This commit is contained in:
LoveSy 2021-08-07 20:18:07 +08:00 committed by GitHub
parent e1cdb46eb1
commit 29afb441d8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 17 additions and 2 deletions

View File

@ -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();
}
};