Skip to content

Commit b33eeda

Browse files
committed
refactor: Optimize and enhance resource hooking
This commit refactors the `ResourcesTool` for more efficient and robust resource hooking. Key changes: - Implemented on-demand, incremental hooking for resource types (e.g., color, drawable) to improve performance. - Added recursion protection using `ThreadLocal` to prevent infinite loops during resource replacement. - Enhanced `TypedArray` hooking to support a wider range of methods and replacement types (ID, density, object). - Optimized resource key resolution and caching for faster lookups. - Ensured preference change listeners are only registered once.
1 parent 417ca76 commit b33eeda

2 files changed

Lines changed: 285 additions & 222 deletions

File tree

library/libhook/src/main/java/com/sevtinge/hyperceiler/libhook/base/XposedInitEntry.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
public class XposedInitEntry extends XposedModule {
4848

4949
private static final String TAG = "HyperCeiler";
50+
private volatile boolean mPrefsListenerRegistered = false;
5051
protected String processName;
5152
protected SharedPreferences remotePrefs;
5253
protected SharedPreferences.OnSharedPreferenceChangeListener mListener;
@@ -167,6 +168,7 @@ protected void initPrefs() {
167168
}
168169

169170
protected void loadPreferenceChange() {
171+
if (mPrefsListenerRegistered) return;
170172
HashSet<String> ignoreKeys = new HashSet<>();
171173

172174
mListener = (sharedPreferences, key) -> {
@@ -182,5 +184,6 @@ protected void loadPreferenceChange() {
182184
};
183185
remotePrefs = getRemotePreferences(PrefsUtils.mPrefsName + "_remote");
184186
remotePrefs.registerOnSharedPreferenceChangeListener(mListener);
187+
mPrefsListenerRegistered = true;
185188
}
186189
}

0 commit comments

Comments
 (0)