Procházet zdrojové kódy

1.优化启动逻辑主要代码放在service执行

JaycePC před 4 měsíci
rodič
revize
46ebeb6169

+ 3 - 1
app/build.gradle

@@ -13,7 +13,7 @@ android {
         //noinspection ExpiredTargetSdkVersion
         targetSdk 28
         versionCode 1
-        versionName "1.1"
+        versionName "1.2"
 
         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
     }
@@ -71,4 +71,6 @@ dependencies {
     implementation("com.squareup.okhttp3:logging-interceptor:4.12.0")
     //noinspection UseTomlInstead,GradleDependency
     implementation "androidx.work:work-runtime:2.9.1"
+    //noinspection UseTomlInstead
+    implementation("org.greenrobot:eventbus:3.3.1")
 }

+ 15 - 134
app/src/main/java/xn/update/MainActivity.java

@@ -2,51 +2,29 @@ package xn.update;
 
 import android.annotation.SuppressLint;
 import android.os.Bundle;
-import android.text.TextUtils;
-import android.util.Log;
 import android.widget.EditText;
 
 import androidx.activity.EdgeToEdge;
-import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.appcompat.app.AppCompatActivity;
 import androidx.core.graphics.Insets;
-import androidx.core.util.Pair;
 import androidx.core.view.ViewCompat;
 import androidx.core.view.WindowInsetsCompat;
-import androidx.work.ExistingPeriodicWorkPolicy;
-import androidx.work.PeriodicWorkRequest;
-import androidx.work.WorkManager;
 
 import com.blankj.utilcode.util.ActivityUtils;
 import com.blankj.utilcode.util.AppUtils;
-import com.blankj.utilcode.util.LogUtils;
-import com.blankj.utilcode.util.NetworkUtils;
 import com.blankj.utilcode.util.SPUtils;
-import com.blankj.utilcode.util.ThreadUtils;
 import com.blankj.utilcode.util.ToastUtils;
-import com.hikvision.dmb.display.InfoDisplayApi;
-import com.hikvision.dmb.network.InfoNetworkApi;
-import com.hikvision.dmb.system.InfoSystemApi;
-import com.hikvision.dmb.util.InfoUtilApi;
-import com.hjq.permissions.OnPermissionCallback;
-import com.hjq.permissions.Permission;
-import com.hjq.permissions.XXPermissions;
 import com.lxj.xpopup.XPopup;
 import com.lxj.xpopup.impl.InputConfirmPopupView;
 
-import org.json.JSONObject;
+import org.greenrobot.eventbus.EventBus;
+import org.greenrobot.eventbus.Subscribe;
+import org.greenrobot.eventbus.ThreadMode;
 
-import java.util.List;
-import java.util.concurrent.ThreadLocalRandom;
-import java.util.concurrent.TimeUnit;
-
-import okhttp3.Response;
 import xn.update.constant.AppConstant;
 import xn.update.databinding.ActivityMainBinding;
 import xn.update.evnet.UpdateUiEvent;
-import xn.update.http.HttpTool;
-import xn.update.works.TaskWork;
 
 public class MainActivity extends AppCompatActivity {
     private ActivityMainBinding binding;
@@ -55,24 +33,13 @@ public class MainActivity extends AppCompatActivity {
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
+        if (!EventBus.getDefault().isRegistered(this)) {
+            EventBus.getDefault().register(this);
+        }
         // 启动后台任务
         Tool.INSTANCE.startTaskService();
         // 先启动主应用
         Tool.INSTANCE.startMasterApp();
-        // 启动保活worker
-        PeriodicWorkRequest taskRequest = new PeriodicWorkRequest.Builder(TaskWork.class, 15, TimeUnit.MINUTES).build();
-        WorkManager.getInstance(getApplicationContext()).enqueueUniquePeriodicWork("Task", ExistingPeriodicWorkPolicy.CANCEL_AND_REENQUEUE, taskRequest);
-        // 自动更新应用
-        SPUtils.getInstance().put(AppConstant.AUTO_UPDATE, true);
-        // 自动拉起主应用
-        SPUtils.getInstance().put(AppConstant.AUTO_MASTER, true);
-
-        InfoSystemApi.openAdb();
-        InfoDisplayApi.setStatusBarEnable(false);
-        InfoDisplayApi.setNavigationBarEnable(false);
-        InfoUtilApi.setUsbSwitch(false);
-        SPUtils.getInstance().put("isRoot", 0 == InfoUtilApi.getRoot());
-        SPUtils.getInstance().put("IP", InfoNetworkApi.getEthernetConfig().ipAddress);
 
         EdgeToEdge.enable(this);
         binding = ActivityMainBinding.inflate(getLayoutInflater());
@@ -109,106 +76,20 @@ public class MainActivity extends AppCompatActivity {
             }
             return true;
         });
-        InfoUtilApi.enableProtection(AppUtils.getAppPackageName(), false);
-        InfoSystemApi.setLauncherForced(AppUtils.getAppPackageName());
-        requestPermission();
-    }
 
-    private void requestPermission() {
-        // 全量权限申请
-        XXPermissions.with(this)
-                .permission(Permission.READ_EXTERNAL_STORAGE)
-                .permission(Permission.WRITE_EXTERNAL_STORAGE)
-                .permission(Permission.NOTIFICATION_SERVICE)
-                .request(new OnPermissionCallback() {
-                    @Override
-                    public void onGranted(@NonNull List<String> permissions, boolean allGranted) {
-                        if (allGranted) {
-                            terminalAuth();
-                        } else {
-                            new XPopup.Builder(MainActivity.this)
-                                    .dismissOnBackPressed(false)
-                                    .dismissOnTouchOutside(false)
-                                    .asConfirm("Tips", "您必须同意所有权限才可以继续使用", ()
-                                            -> requestPermission())
-                                    .show();
-                        }
-                    }
-
-                    @Override
-                    public void onDenied(@NonNull List<String> permissions, boolean doNotAskAgain) {
-                        OnPermissionCallback.super.onDenied(permissions, doNotAskAgain);
-                        if (doNotAskAgain) {
-                            new XPopup.Builder(MainActivity.this)
-                                    .dismissOnBackPressed(false)
-                                    .dismissOnTouchOutside(false)
-                                    .asConfirm("Tips", "您必须同意所有权限才可以继续使用", ()
-                                            -> XXPermissions.startPermissionActivity(MainActivity.this, permissions))
-                                    .show();
-                        } else {
-                            new XPopup.Builder(MainActivity.this)
-                                    .dismissOnBackPressed(false)
-                                    .dismissOnTouchOutside(false)
-                                    .asConfirm("Tips", "您必须同意所有权限才可以继续使用", ()
-                                            -> requestPermission())
-                                    .show();
-                        }
-                    }
-                });
     }
 
-    ThreadUtils.SimpleTask<Boolean> simpleTask = new ThreadUtils.SimpleTask<Boolean>() {
-        @Override
-        public Boolean doInBackground() throws Throwable {
-            return NetworkUtils.isAvailableByPing(Tool.INSTANCE.getBaseUrl().host());
-        }
-
-        @Override
-        public void onSuccess(Boolean result) {
-            if (result) {
-                binding.tipsTV.setText("鉴权中...");
-                ThreadUtils.executeByCached(new ThreadUtils.SimpleTask<Pair<Boolean, String>>() {
-                    @Override
-                    public Pair<Boolean, String> doInBackground() throws Throwable {
-                        try {
-                            SPUtils.getInstance().put("TerminalAuth", "");
-                            Response response = HttpTool.INSTANCE.terminalAuth();
-                            if (response.isSuccessful()) {
-                                String json = response.body().string();
-                                JSONObject jsonObject = new JSONObject(json);
-                                int code = jsonObject.getInt("code");
-                                if (200 == code) {
-                                    String data = jsonObject.getString("data");
-                                    SPUtils.getInstance().put("TerminalAuth", TextUtils.isEmpty(data) ? "" : data);
-                                    return Pair.create(true, "");
-                                } else {
-                                    return Pair.create(false, jsonObject.getString("message"));
-                                }
-                            }
-                        } catch (Exception e) {
-                            LogUtils.e(Log.getStackTraceString(e));
-                        }
-                        return Pair.create(false, "鉴权异常,请联系管理员!");
-                    }
+    @Subscribe(threadMode = ThreadMode.MAIN)
+    public void onMessageEvent(UpdateUiEvent event) {
+        binding.tipsTV.setText(event.getMsg());
+    }
 
-                    @Override
-                    public void onSuccess(Pair<Boolean, String> result) {
-                        if (result.first) {
-                            binding.tipsTV.setText(result.second);
-                            ThreadUtils.cancel(simpleTask);
-                        } else {
-                            binding.tipsTV.setText(result.second);
-                        }
-                    }
-                });
-            } else {
-                binding.tipsTV.setText("无法连接到服务器,请联系管理员!");
-            }
+    @Override
+    protected void onDestroy() {
+        super.onDestroy();
+        if (!EventBus.getDefault().isRegistered(this)) {
+            EventBus.getDefault().register(this);
         }
-    };
-
-    private void terminalAuth() {
-        ThreadUtils.executeByCachedAtFixRate(simpleTask, ThreadLocalRandom.current().nextInt(10, 20), TimeUnit.SECONDS);
     }
 
     @SuppressLint("MissingSuperCall")

+ 13 - 0
app/src/main/java/xn/update/evnet/UpdateUiEvent.java

@@ -1,4 +1,17 @@
 package xn.update.evnet;
 
 public class UpdateUiEvent {
+    public String msg;
+
+    public UpdateUiEvent(String msg) {
+        this.msg = msg;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
 }

+ 1 - 1
app/src/main/java/xn/update/receiver/TimeTickReceiver.java

@@ -97,7 +97,6 @@ public class TimeTickReceiver extends BroadcastReceiver {
                                     }
                                 }
                             }
-                            context.unregisterReceiver(downloadApkReceiver);
                             isRunning = false;
                         }
                     }
@@ -133,6 +132,7 @@ public class TimeTickReceiver extends BroadcastReceiver {
                                     return true;
                                 }
                             } else {
+
                                 LogUtils.e(updateTask.getMessage());
                             }
                         }

+ 150 - 0
app/src/main/java/xn/update/service/TaskService.java

@@ -8,14 +8,48 @@ import android.content.Intent;
 import android.content.IntentFilter;
 import android.os.Build;
 import android.os.IBinder;
+import android.text.TextUtils;
+import android.util.Log;
 
+import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.core.app.NotificationCompat;
+import androidx.core.util.Pair;
+import androidx.work.ExistingPeriodicWorkPolicy;
+import androidx.work.PeriodicWorkRequest;
+import androidx.work.WorkManager;
 
+import com.blankj.utilcode.util.ActivityUtils;
+import com.blankj.utilcode.util.AppUtils;
 import com.blankj.utilcode.util.LogUtils;
+import com.blankj.utilcode.util.NetworkUtils;
+import com.blankj.utilcode.util.SPUtils;
+import com.blankj.utilcode.util.ThreadUtils;
+import com.hikvision.dmb.display.InfoDisplayApi;
+import com.hikvision.dmb.network.InfoNetworkApi;
+import com.hikvision.dmb.system.InfoSystemApi;
+import com.hikvision.dmb.util.InfoUtilApi;
+import com.hjq.permissions.OnPermissionCallback;
+import com.hjq.permissions.Permission;
+import com.hjq.permissions.XXPermissions;
+import com.lxj.xpopup.XPopup;
 
+import org.greenrobot.eventbus.EventBus;
+import org.json.JSONObject;
+
+import java.util.List;
+import java.util.concurrent.ThreadLocalRandom;
+import java.util.concurrent.TimeUnit;
+
+import okhttp3.Response;
+import xn.update.MainActivity;
 import xn.update.R;
+import xn.update.Tool;
+import xn.update.constant.AppConstant;
+import xn.update.evnet.UpdateUiEvent;
+import xn.update.http.HttpTool;
 import xn.update.receiver.TimeTickReceiver;
+import xn.update.works.TaskWork;
 
 public class TaskService extends Service {
 
@@ -30,11 +64,30 @@ public class TaskService extends Service {
     @Override
     public void onCreate() {
         super.onCreate();
+        // 启动保活worker
+        PeriodicWorkRequest taskRequest = new PeriodicWorkRequest.Builder(TaskWork.class, 15, TimeUnit.MINUTES).build();
+        WorkManager.getInstance(getApplicationContext()).enqueueUniquePeriodicWork("Task", ExistingPeriodicWorkPolicy.CANCEL_AND_REENQUEUE, taskRequest);
+        // 自动更新应用
+        SPUtils.getInstance().put(AppConstant.AUTO_UPDATE, true);
+        // 自动拉起主应用
+        SPUtils.getInstance().put(AppConstant.AUTO_MASTER, true);
+
+        InfoSystemApi.openAdb();
+        InfoDisplayApi.setStatusBarEnable(false);
+        InfoDisplayApi.setNavigationBarEnable(false);
+        InfoUtilApi.setUsbSwitch(false);
+        SPUtils.getInstance().put("isRoot", 0 == InfoUtilApi.getRoot());
+        SPUtils.getInstance().put("IP", InfoNetworkApi.getEthernetConfig().ipAddress);
+        InfoUtilApi.enableProtection(AppUtils.getAppPackageName(), false);
+        InfoSystemApi.setLauncherForced(AppUtils.getAppPackageName());
+
         createNotificationChannel();
         LogUtils.d(getClass().getName(), "onCreate");
         timeTickReceiver = new TimeTickReceiver();
         // 监听分钟广播
         registerReceiver(timeTickReceiver, new IntentFilter(Intent.ACTION_TIME_TICK));
+
+        requestPermission();
     }
 
     @Override
@@ -81,4 +134,101 @@ public class TaskService extends Service {
                 .setPriority(NotificationCompat.PRIORITY_DEFAULT);
         return builder.build();
     }
+
+    private void requestPermission() {
+        // 全量权限申请
+        XXPermissions.with(ActivityUtils.getTopActivity())
+                .permission(Permission.READ_EXTERNAL_STORAGE)
+                .permission(Permission.WRITE_EXTERNAL_STORAGE)
+                .permission(Permission.NOTIFICATION_SERVICE)
+                .request(new OnPermissionCallback() {
+                    @Override
+                    public void onGranted(@NonNull List<String> permissions, boolean allGranted) {
+                        if (allGranted) {
+                            terminalAuth();
+                        } else {
+                            new XPopup.Builder(TaskService.this)
+                                    .dismissOnBackPressed(false)
+                                    .dismissOnTouchOutside(false)
+                                    .asConfirm("Tips", "您必须同意所有权限才可以继续使用", ()
+                                            -> requestPermission())
+                                    .show();
+                        }
+                    }
+
+                    @Override
+                    public void onDenied(@NonNull List<String> permissions, boolean doNotAskAgain) {
+                        OnPermissionCallback.super.onDenied(permissions, doNotAskAgain);
+                        if (doNotAskAgain) {
+                            new XPopup.Builder(TaskService.this)
+                                    .dismissOnBackPressed(false)
+                                    .dismissOnTouchOutside(false)
+                                    .asConfirm("Tips", "您必须同意所有权限才可以继续使用", ()
+                                            -> XXPermissions.startPermissionActivity(TaskService.this, permissions))
+                                    .show();
+                        } else {
+                            new XPopup.Builder(TaskService.this)
+                                    .dismissOnBackPressed(false)
+                                    .dismissOnTouchOutside(false)
+                                    .asConfirm("Tips", "您必须同意所有权限才可以继续使用", ()
+                                            -> requestPermission())
+                                    .show();
+                        }
+                    }
+                });
+    }
+
+    ThreadUtils.SimpleTask<Boolean> simpleTask = new ThreadUtils.SimpleTask<Boolean>() {
+        @Override
+        public Boolean doInBackground() throws Throwable {
+            return NetworkUtils.isAvailableByPing(Tool.INSTANCE.getBaseUrl().host());
+        }
+
+        @Override
+        public void onSuccess(Boolean result) {
+            if (result) {
+                EventBus.getDefault().post(new UpdateUiEvent("鉴权中..."));
+                ThreadUtils.executeByCached(new ThreadUtils.SimpleTask<Pair<Boolean, String>>() {
+                    @Override
+                    public Pair<Boolean, String> doInBackground() throws Throwable {
+                        try {
+                            SPUtils.getInstance().put("TerminalAuth", "");
+                            Response response = HttpTool.INSTANCE.terminalAuth();
+                            if (response.isSuccessful()) {
+                                String json = response.body().string();
+                                JSONObject jsonObject = new JSONObject(json);
+                                int code = jsonObject.getInt("code");
+                                if (200 == code) {
+                                    String data = jsonObject.getString("data");
+                                    SPUtils.getInstance().put("TerminalAuth", TextUtils.isEmpty(data) ? "" : data);
+                                    return Pair.create(true, "");
+                                } else {
+                                    return Pair.create(false, jsonObject.getString("message"));
+                                }
+                            }
+                        } catch (Exception e) {
+                            LogUtils.e(Log.getStackTraceString(e));
+                        }
+                        return Pair.create(false, "鉴权异常,请联系管理员!");
+                    }
+
+                    @Override
+                    public void onSuccess(Pair<Boolean, String> result) {
+                        if (result.first) {
+                            EventBus.getDefault().post(new UpdateUiEvent(result.second));
+                            ThreadUtils.cancel(simpleTask);
+                        } else {
+                            EventBus.getDefault().post(new UpdateUiEvent(result.second));
+                        }
+                    }
+                });
+            } else {
+                EventBus.getDefault().post(new UpdateUiEvent("无法连接到服务器,请联系管理员!"));
+            }
+        }
+    };
+
+    private void terminalAuth() {
+        ThreadUtils.executeByCachedAtFixRate(simpleTask, ThreadLocalRandom.current().nextInt(10, 20), TimeUnit.SECONDS);
+    }
 }

+ 1 - 1
app/src/main/res/layout/activity_main.xml

@@ -21,7 +21,7 @@
         android:layout_below="@id/logo_IV"
         android:layout_centerHorizontal="true"
         android:layout_marginTop="20dp"
-        android:text="鉴权异常"
+        android:text="未初始化"
         android:textColor="@color/black" />
 
     <TextView