package com.zj.zjdsp.adCore.assist; import android.app.Activity; import com.bytedance.sdk.openadsdk.downloadnew.core.TTDownloadField; import java.lang.ref.WeakReference; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.util.Map; public class ZjDspActivityManager { private static ZjDspActivityManager sInstance = new ZjDspActivityManager(); private WeakReference<Activity> sCurrentActivityWeakRef; private ZjDspActivityManager() { } public static ZjDspActivityManager getInstance() { return sInstance; } public Activity getCurrentActivity() { WeakReference<Activity> weakReference = this.sCurrentActivityWeakRef; if (weakReference != null) { return weakReference.get(); } return getRunActivity(); } public void setCurrentActivity(Activity activity) { this.sCurrentActivityWeakRef = new WeakReference<>(activity); } private Activity getRunActivity() { try { Class<?> cls = Class.forName("android.app.ActivityThread"); Object invoke = cls.getMethod("currentActivityThread", new Class[0]).invoke(null, new Object[0]); Field declaredField = cls.getDeclaredField("mActivities"); declaredField.setAccessible(true); for (Object obj : ((Map) declaredField.get(invoke)).values()) { Class<?> cls2 = obj.getClass(); Field declaredField2 = cls2.getDeclaredField("paused"); declaredField2.setAccessible(true); if (!declaredField2.getBoolean(obj)) { Field declaredField3 = cls2.getDeclaredField(TTDownloadField.TT_ACTIVITY); declaredField3.setAccessible(true); return (Activity) declaredField3.get(obj); } } } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (InvocationTargetException e2) { e2.printStackTrace(); } catch (NoSuchMethodException e3) { e3.printStackTrace(); } catch (NoSuchFieldException e4) { e4.printStackTrace(); } catch (IllegalAccessException e5) { e5.printStackTrace(); } return null; } }