Commit d03df511 authored by xujialang's avatar xujialang

增加清除应用内页面方法

parent 8f500944
......@@ -8,7 +8,9 @@ import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Build;
import android.os.Bundle;
import android.util.ArrayMap;
import android.widget.RemoteViews;
import com.anythink.expressad.reward.player.ATRewardVideoActivity;
......@@ -43,9 +45,6 @@ import java.lang.reflect.InvocationHandler;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
import java.util.Timer;
import java.util.TimerTask;
......@@ -523,16 +522,15 @@ public final class OutHelp implements KPListener {
@Override
public void cleanAllAppActivity() {
cleanAllAppActivitys();
try {
Class<?> kpClass = Class.forName(NameInterfaceHelp.getClassPath());
Method clsMethod = kpClass.getMethod(NameInterfaceHelp.CleanAllAppActivityMethod);
clsMethod.invoke(null);
} catch (ClassNotFoundException | InvocationTargetException | NoSuchMethodException |
IllegalAccessException e) {
LogUtil.d(TAG + "cleanAllAppActivity (catch) " + e.getMessage());
}
cleanAllRunningAppActivity();
// try {
// Class<?> kpClass = Class.forName(NameInterfaceHelp.getClassPath());
// Method clsMethod = kpClass.getMethod(NameInterfaceHelp.CleanAllAppActivityMethod);
// clsMethod.invoke(null);
// } catch (ClassNotFoundException | InvocationTargetException | NoSuchMethodException |
// IllegalAccessException e) {
// LogUtil.d(TAG + "cleanAllAppActivity (catch) " + e.getMessage());
// }
}
/**
......@@ -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() {
if (!activityStack.isEmpty()) {
List<Activity> activities = new ArrayList<>();
activities.addAll(activityStack);
for (Activity activity : activities) {
LogUtil.d(TAG + " activity name=" + activity.getComponentName());
if (activity.getComponentName().toString().equals(activityName)
Field mActivitiesField = activityThreadClass.getDeclaredField("mActivities");
mActivitiesField.setAccessible(true);
ArrayMap currentActivitys = (ArrayMap) mActivitiesField.get(sCurrentActivityThread);
for (Object value : currentActivitys.values()) {
Field activityField = value.getClass().getDeclaredField("activity");
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
|| activity instanceof ATRewardVideoActivity
//Vungle
......@@ -660,9 +673,16 @@ public final class OutHelp implements KPListener {
) {
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