Quellcode durchsuchen

新增看门狗

JaycePC vor 1 Monat
Ursprung
Commit
d259989a97

+ 3 - 1
app/build.gradle

@@ -12,7 +12,7 @@ android {
         //noinspection ExpiredTargetSdkVersion
         targetSdk 28
         versionCode 1
-        versionName "1.4"
+        versionName "1.5"
 
         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
     }
@@ -66,4 +66,6 @@ dependencies {
     implementation 'com.github.li-xiaojun:XPopupExt:1.0.1'
     //noinspection UseTomlInstead
     implementation("org.greenrobot:eventbus:3.3.1")
+
+    implementation 'com.github.anrwatchdog:anrwatchdog:1.4.0'
 }

+ 1 - 0
app/src/main/AndroidManifest.xml

@@ -16,6 +16,7 @@
         android:fullBackupContent="@xml/backup_rules"
         android:icon="@mipmap/ic_launcher"
         android:label="@string/app_name"
+        android:name=".App"
         android:networkSecurityConfig="@xml/network_security_config"
         android:requestLegacyExternalStorage="true"
         android:roundIcon="@mipmap/ic_launcher_round"

+ 69 - 0
app/src/main/java/xn/huaxue/update/App.java

@@ -0,0 +1,69 @@
+package xn.huaxue.update;
+
+import android.app.Application;
+import android.widget.Toast;
+
+import com.blankj.utilcode.util.ActivityUtils;
+import com.blankj.utilcode.util.AppUtils;
+import com.blankj.utilcode.util.CrashUtils;
+import com.blankj.utilcode.util.FileUtils;
+import com.blankj.utilcode.util.LogUtils;
+import com.blankj.utilcode.util.SPUtils;
+import com.blankj.utilcode.util.ThreadUtils;
+import com.github.anrwatchdog.ANRError;
+import com.github.anrwatchdog.ANRWatchDog;
+
+public class App extends Application {
+    @Override
+    public void onCreate() {
+        super.onCreate();
+        new ANRWatchDog(5000).setANRListener(new ANRWatchDog.ANRListener() {
+            @Override
+            public void onAppNotResponding(ANRError error) {
+                ThreadUtils.runOnUiThread(new Runnable() {
+                    @Override
+                    public void run() {
+                        Toast.makeText(ActivityUtils.getTopActivity(), "检测到应用卡顿,重启应用恢复!", Toast.LENGTH_LONG).show();
+                        int anrSize = SPUtils.getInstance().getInt("ANR_size", 0);
+                        if (anrSize > 5) {
+                            SPUtils.getInstance().put("ANR_size", 0);
+                            Tool.INSTANCE.reboot();
+                        } else {
+                            SPUtils.getInstance().put("ANR_size", ++anrSize);
+                            Tool.INSTANCE.reStartApp();
+                        }
+                    }
+                });
+                LogUtils.e(error.getMessage(), error);
+            }
+        }).start();
+
+        String logPath = "/sdcard/logs/";
+        String crashPath = "/sdcard/logs/crash/";
+        // log文件存储地址
+        FileUtils.createOrExistsDir(logPath);
+        FileUtils.createOrExistsDir(crashPath);
+        CrashUtils.init(crashPath, crashInfo -> {
+            LogUtils.e(crashInfo);
+            Tool.INSTANCE.reStartApp();
+        });
+        LogUtils.Config config = LogUtils.getConfig();
+        // log开关控制
+        config.setLogSwitch(true);
+        // log控制台开关
+        config.setConsoleSwitch(true);
+        // logTag
+        config.setGlobalTag("Jayce");
+        // log头部信息开关
+        config.setLogHeadSwitch(true);
+        // log文件开关
+        config.setLog2FileSwitch(true);
+        config.setDir(logPath);
+        // log文件前缀
+        config.setFilePrefix(AppUtils.getAppName());
+        // log边框开关
+        config.setBorderSwitch(true);
+        // log文件保存天数
+        config.setSaveDays(30);
+    }
+}

+ 4 - 0
app/src/main/java/xn/huaxue/update/Tool.java

@@ -99,4 +99,8 @@ public enum Tool {
             return url;
         }
     }
+
+    public void reboot() {
+        lztek.hardReboot();
+    }
 }