Pārlūkot izejas kodu

<修改异常处理>

weizhengliang 4 gadi atpakaļ
vecāks
revīzija
f6d1a9f066

+ 12 - 0
app/src/main/java/com/wdkl/callingbed/MyApplication.java

@@ -1,5 +1,6 @@
 package com.wdkl.callingbed;
 
+import android.app.Activity;
 import android.app.Application;
 import android.content.ComponentName;
 import android.content.Context;
@@ -14,6 +15,8 @@ import com.wdkl.callingbed.util.anrfcutil.AnrFcExceptionUtil;
 import com.wdkl.callingbed.util.ethernetwifiwithsipconnectstatus.WifiBindSipStatusConnector;
 import com.zhy.http.okhttp.OkHttpUtils;
 
+import java.util.ArrayList;
+import java.util.List;
 import java.util.concurrent.TimeUnit;
 
 import okhttp3.ConnectionPool;
@@ -46,6 +49,15 @@ public class MyApplication extends Application {
 //        return refWatcher;
 //    }
 
+    public static List<Activity> activities = new ArrayList<>();
+
+    public static void addActivity(Activity activity) {
+        activities.add(activity);
+    }
+
+    public static void removeActivity(Activity activity) {
+        activities.remove(activity);
+    }
 
     public MyApplication() {
         sAppContext = getAppContext();

+ 7 - 2
app/src/main/java/com/wdkl/callingbed/ui/CallingBedActivity.java

@@ -64,6 +64,7 @@ import com.wdkl.callingbed.entity.UdpEntity;
 import com.wdkl.callingbed.receive.AlarmReceiver;
 import com.wdkl.callingbed.receive.NetworkConnectChangedReceiver;
 import com.wdkl.callingbed.service.SoundPoolManager;
+import com.wdkl.callingbed.util.AutoRebootUtil;
 import com.wdkl.callingbed.util.BitmapUtils;
 import com.wdkl.callingbed.util.DateUtil;
 import com.wdkl.callingbed.util.DensityUtils;
@@ -600,6 +601,8 @@ public class CallingBedActivity extends BaseActivity implements ISerialPortBedOn
         } else if ("rk3128".equals(model)){
             SCREEN_OFF_LIGHT = "1";
         }
+
+        MyApplication.addActivity(CallingBedActivity.this);
     }
 
     @Override
@@ -2003,12 +2006,14 @@ public class CallingBedActivity extends BaseActivity implements ISerialPortBedOn
                 @Override
                 public void run() {
                     isReset = true;
-                    Intent mStartActivity = new Intent(context, InitActivity.class);
+                    /*Intent mStartActivity = new Intent(context, InitActivity.class);
                     int mPendingIntentId = 123456;
                     PendingIntent mPendingIntent = PendingIntent.getActivity(context, mPendingIntentId, mStartActivity, PendingIntent.FLAG_CANCEL_CURRENT);
                     AlarmManager mgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
                     mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 2000, mPendingIntent);
-                    System.exit(0);
+                    System.exit(0);*/
+
+                    AutoRebootUtil.restartApp();
                 }
             }, 2000);
         }

+ 34 - 0
app/src/main/java/com/wdkl/callingbed/util/AutoRebootUtil.java

@@ -1,9 +1,16 @@
 package com.wdkl.callingbed.util;
 
+import android.annotation.SuppressLint;
+import android.app.Activity;
+import android.app.AlarmManager;
+import android.app.PendingIntent;
 import android.content.Context;
 import android.content.Intent;
 import android.os.SystemProperties;
 
+import com.wdkl.callingbed.MyApplication;
+import com.wdkl.callingbed.common.Constants;
+
 import java.util.Calendar;
 
 import static com.wdkl.callingbed.common.Constants.NET_ERROR_FIVE_AFTER_TOAST;
@@ -140,4 +147,31 @@ public class AutoRebootUtil {
             return "网络自检启动:系统将在" + countDownMinute + "分钟后重新启动";
         } else return "";
     }
+
+    private static boolean restart = false;
+    public static void restartApp() {
+        if (!restart) {
+            try {
+                Intent intent = new Intent(MyApplication.getAppContext(), Constants.ANR_FC);
+                @SuppressLint("WrongConstant") PendingIntent mPendingIntent = PendingIntent.getActivity(
+                        MyApplication.getAppContext(), 0, intent,
+                        Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
+                AlarmManager mgr = (AlarmManager) MyApplication.getAppContext().getSystemService(Context.ALARM_SERVICE);
+                mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 2000, mPendingIntent);
+
+                for (Activity activity : MyApplication.activities) {
+                    if (activity != null) {
+                        activity.finish();
+                    }
+                }
+                MyApplication.activities.clear();
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+
+            restart = true;
+            android.os.Process.killProcess(android.os.Process.myPid());
+            System.exit(0);
+        }
+    }
 }

+ 9 - 4
app/src/main/java/com/wdkl/callingbed/util/anrfcutil/AnrFcExceptionUtil.java

@@ -13,6 +13,7 @@ import com.github.anrwatchdog.ANRError;
 import com.github.anrwatchdog.ANRWatchDog;
 import com.wdkl.callingbed.MyApplication;
 import com.wdkl.callingbed.common.Constants;
+import com.wdkl.callingbed.util.AutoRebootUtil;
 import com.wdkl.callingbed.util.ClientUploadUtils;
 import com.wdkl.callingbed.util.LogUtil;
 
@@ -76,7 +77,7 @@ public class AnrFcExceptionUtil implements Thread.UncaughtExceptionHandler {
             } catch (InterruptedException e) {
                 Log.e(TAG, "error : ", e);
             }
-            Intent intent = new Intent(application.getApplicationContext(), Constants.ANR_FC);
+            /*Intent intent = new Intent(application.getApplicationContext(), Constants.ANR_FC);
             @SuppressLint("WrongConstant") PendingIntent restartIntent = PendingIntent.getActivity(
                     application.getApplicationContext(), 0, intent,
                     Intent.FLAG_ACTIVITY_NEW_TASK);
@@ -85,7 +86,9 @@ public class AnrFcExceptionUtil implements Thread.UncaughtExceptionHandler {
             mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 1000,
                     restartIntent); // 1秒钟后重启应用
             //杀死该应用进程
-            android.os.Process.killProcess(android.os.Process.myPid());
+            android.os.Process.killProcess(android.os.Process.myPid());*/
+
+            AutoRebootUtil.restartApp();
         }
     }
 
@@ -180,12 +183,14 @@ public class AnrFcExceptionUtil implements Thread.UncaughtExceptionHandler {
         }).setIgnoreDebugger(true).setANRListener(new ANRWatchDog.ANRListener() {
             @Override
             public void onAppNotResponding(ANRError error) {
-                Intent mStartActivity = new Intent(application.getApplicationContext(), Constants.ANR_FC);
+                /*Intent mStartActivity = new Intent(application.getApplicationContext(), Constants.ANR_FC);
                 int mPendingIntentId = 123456;
                 PendingIntent mPendingIntent = PendingIntent.getActivity(application.getApplicationContext(), mPendingIntentId, mStartActivity, PendingIntent.FLAG_CANCEL_CURRENT);
                 AlarmManager mgr = (AlarmManager) application.getApplicationContext().getSystemService(Context.ALARM_SERVICE);
                 mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 1500, mPendingIntent);
-                android.os.Process.killProcess(android.os.Process.myPid());
+                android.os.Process.killProcess(android.os.Process.myPid());*/
+
+                AutoRebootUtil.restartApp();
             }
         }).start();