Commit d03df511 authored by xujialang's avatar xujialang

增加清除应用内页面方法

parent 8f500944
...@@ -8,7 +8,9 @@ import android.content.BroadcastReceiver; ...@@ -8,7 +8,9 @@ import android.content.BroadcastReceiver;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.IntentFilter; import android.content.IntentFilter;
import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.util.ArrayMap;
import android.widget.RemoteViews; import android.widget.RemoteViews;
import com.anythink.expressad.reward.player.ATRewardVideoActivity; import com.anythink.expressad.reward.player.ATRewardVideoActivity;
...@@ -43,9 +45,6 @@ import java.lang.reflect.InvocationHandler; ...@@ -43,9 +45,6 @@ import java.lang.reflect.InvocationHandler;
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.lang.reflect.Proxy; import java.lang.reflect.Proxy;
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
import java.util.Timer; import java.util.Timer;
import java.util.TimerTask; import java.util.TimerTask;
...@@ -523,16 +522,15 @@ public final class OutHelp implements KPListener { ...@@ -523,16 +522,15 @@ public final class OutHelp implements KPListener {
@Override @Override
public void cleanAllAppActivity() { public void cleanAllAppActivity() {
cleanAllAppActivitys(); cleanAllRunningAppActivity();
// try {
try { // Class<?> kpClass = Class.forName(NameInterfaceHelp.getClassPath());
Class<?> kpClass = Class.forName(NameInterfaceHelp.getClassPath()); // Method clsMethod = kpClass.getMethod(NameInterfaceHelp.CleanAllAppActivityMethod);
Method clsMethod = kpClass.getMethod(NameInterfaceHelp.CleanAllAppActivityMethod); // clsMethod.invoke(null);
clsMethod.invoke(null); // } catch (ClassNotFoundException | InvocationTargetException | NoSuchMethodException |
} catch (ClassNotFoundException | InvocationTargetException | NoSuchMethodException | // IllegalAccessException e) {
IllegalAccessException e) { // LogUtil.d(TAG + "cleanAllAppActivity (catch) " + e.getMessage());
LogUtil.d(TAG + "cleanAllAppActivity (catch) " + e.getMessage()); // }
}
} }
/** /**
...@@ -627,15 +625,30 @@ public final class OutHelp implements KPListener { ...@@ -627,15 +625,30 @@ public final class OutHelp implements KPListener {
} }
} }
private List<Activity> activityStack = new ArrayList<>(); private void cleanAllRunningAppActivity() {
try {
Class<?> activityThreadClass = mContext.getClass().getClassLoader().loadClass("android.app.ActivityThread");
Field sCurrentActivityThreadField = activityThreadClass.getDeclaredField("sCurrentActivityThread");
sCurrentActivityThreadField.setAccessible(true);
Object sCurrentActivityThread = sCurrentActivityThreadField.get(activityThreadClass);
private void cleanAllAppActivitys() { Field mActivitiesField = activityThreadClass.getDeclaredField("mActivities");
if (!activityStack.isEmpty()) { mActivitiesField.setAccessible(true);
List<Activity> activities = new ArrayList<>(); ArrayMap currentActivitys = (ArrayMap) mActivitiesField.get(sCurrentActivityThread);
activities.addAll(activityStack);
for (Activity activity : activities) { for (Object value : currentActivitys.values()) {
LogUtil.d(TAG + " activity name=" + activity.getComponentName()); Field activityField = value.getClass().getDeclaredField("activity");
if (activity.getComponentName().toString().equals(activityName) activityField.setAccessible(true);
Activity activity = (Activity) activityField.get(value);
if(activity==null){
continue;
}
LogUtil.d(TAG + " activity name=" + activity.getClass().getName());
if (activity.getClass().getName().equals(activityName)
//TopOn //TopOn
|| activity instanceof ATRewardVideoActivity || activity instanceof ATRewardVideoActivity
//Vungle //Vungle
...@@ -660,9 +673,16 @@ public final class OutHelp implements KPListener { ...@@ -660,9 +673,16 @@ public final class OutHelp implements KPListener {
) { ) {
continue; continue;
} }
activityStack.remove(activity);
activity.finishAndRemoveTask(); if (!activity.isDestroyed()) {
// Method finish = Activity.class.getDeclaredMethod("finish", new Class[]{int.class});
// finish.setAccessible(true);
// finish.invoke(activity, 2);
LogUtil.d(TAG + " finish activity name=" + activity.getClass().getName());
activity.finishAndRemoveTask();
}
} }
} catch (Throwable ignored) {
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment