ActivityKillerV21_V23.java 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. package com.efunbox.base.crash;
  2. import android.app.Activity;
  3. import android.content.Intent;
  4. import android.os.IBinder;
  5. import android.os.Message;
  6. import java.lang.reflect.Field;
  7. import java.lang.reflect.Method;
  8. public class ActivityKillerV21_V23 implements IActivityKiller {
  9. @Override
  10. public void finishLaunchActivity(Message message) {
  11. try {
  12. Object activityClientRecord = message.obj;
  13. Field tokenField = activityClientRecord.getClass().getDeclaredField("token");
  14. tokenField.setAccessible(true);
  15. IBinder binder = (IBinder) tokenField.get(activityClientRecord);
  16. finish(binder);
  17. } catch (Exception e) {
  18. e.printStackTrace();
  19. }
  20. }
  21. @Override
  22. public void finishResumeActivity(Message message) {
  23. try {
  24. finish((IBinder) message.obj);
  25. } catch (Exception e) {
  26. e.printStackTrace();
  27. }
  28. }
  29. @Override
  30. public void finishPauseActivity(Message message) {
  31. try {
  32. finish((IBinder) message.obj);
  33. } catch (Exception e) {
  34. e.printStackTrace();
  35. }
  36. }
  37. @Override
  38. public void finishStopActivity(Message message) {
  39. try {
  40. finish((IBinder) message.obj);
  41. } catch (Exception e) {
  42. e.printStackTrace();
  43. }
  44. }
  45. private void finish(IBinder binder) throws Exception {
  46. Class activityManagerNativeClass = Class.forName("android.app.ActivityManagerNative");
  47. Method getDefaultMethod = activityManagerNativeClass.getDeclaredMethod("getDefault");
  48. Object activityManager = getDefaultMethod.invoke(null);
  49. Method finishActivityMethod = activityManager.getClass().getDeclaredMethod("finishActivity", IBinder.class, int.class, Intent.class, boolean.class);
  50. finishActivityMethod.invoke(activityManager, binder, Activity.RESULT_CANCELED, null, false);
  51. }
  52. }