1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- package com.efunbox.base.crash;
- import android.app.Activity;
- import android.content.Intent;
- import android.os.IBinder;
- import android.os.Message;
- import java.lang.reflect.Field;
- import java.lang.reflect.Method;
- public class ActivityKillerV21_V23 implements IActivityKiller {
- @Override
- public void finishLaunchActivity(Message message) {
- try {
- Object activityClientRecord = message.obj;
- Field tokenField = activityClientRecord.getClass().getDeclaredField("token");
- tokenField.setAccessible(true);
- IBinder binder = (IBinder) tokenField.get(activityClientRecord);
- finish(binder);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- @Override
- public void finishResumeActivity(Message message) {
- try {
- finish((IBinder) message.obj);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- @Override
- public void finishPauseActivity(Message message) {
- try {
- finish((IBinder) message.obj);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- @Override
- public void finishStopActivity(Message message) {
- try {
- finish((IBinder) message.obj);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- private void finish(IBinder binder) throws Exception {
- Class activityManagerNativeClass = Class.forName("android.app.ActivityManagerNative");
- Method getDefaultMethod = activityManagerNativeClass.getDeclaredMethod("getDefault");
- Object activityManager = getDefaultMethod.invoke(null);
- Method finishActivityMethod = activityManager.getClass().getDeclaredMethod("finishActivity", IBinder.class, int.class, Intent.class, boolean.class);
- finishActivityMethod.invoke(activityManager, binder, Activity.RESULT_CANCELED, null, false);
- }
- }
|