From 819940c20dfb8a0c797b3423a3c0a0c67c9fd955 Mon Sep 17 00:00:00 2001
From: hxb <hxb@hdlchina.com.cn>
Date: 星期五, 27 十二月 2024 18:06:23 +0800
Subject: [PATCH] 处理后台运行被释放的问题

---
 app/src/main/java/com/hdl/photovoltaic/utils/ProcessManagerUtils.java              |   27 +++++++++
 app/src/main/java/com/hdl/photovoltaic/ui/powerstation/HouseAndDeviceFragment.java |    3 
 app/src/main/AndroidManifest.xml                                                   |   14 ++++
 app/src/main/java/com/hdl/photovoltaic/uni/BSplashView.java                        |   43 ++++++++++++++
 app/src/main/java/com/hdl/photovoltaic/services/UniappService.java                 |   49 ++++++++++++++++
 app/build.gradle                                                                   |    1 
 app/libs/uniapp-v8-release.aar                                                     |    0 
 app/src/main/aidl/com/hdl/photovoltaic/IUniappAidlInterface.aidl                   |    8 ++
 8 files changed, 143 insertions(+), 2 deletions(-)

diff --git a/app/build.gradle b/app/build.gradle
index 6880677..c427dd7 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -108,6 +108,7 @@
 
     buildFeatures {
         viewBinding true
+        aidl true
     }
     compileOptions {
         sourceCompatibility JavaVersion.VERSION_1_8
diff --git a/app/libs/uniapp-v8-release.aar b/app/libs/uniapp-v8-release.aar
index 8c9fdde..a3f4c59 100644
--- a/app/libs/uniapp-v8-release.aar
+++ b/app/libs/uniapp-v8-release.aar
Binary files differ
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 0e023c4..9e9e872 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -74,6 +74,7 @@
         android:label="@string/app_name"
         android:requestLegacyExternalStorage="true"
         android:supportsRtl="true"
+        android:persistent="true"
         android:theme="@style/Theme.PhotovoltaicDebug">
         <activity
             android:name=".ui.newC.PowerStationsMoveActivity"
@@ -214,6 +215,15 @@
             android:name="org.eclipse.paho.android.service.MqttService"
             android:exported="false" />
 
+        <service
+            android:name=".services.UniappService"
+            android:enabled="true"
+            android:exported="true">
+        <intent-filter>
+            <action android:name="UniappService.ACTION" />
+        </intent-filter>
+        </service>
+
         <meta-data
             android:name="design_height_in_dp"
             android:value="812" />
@@ -224,5 +234,7 @@
             android:name="ScopedStorage"
             android:value="true" />
     </application>
-
+    <queries>
+        <package android:name="com.hdl.photovoltaic.services"/>
+    </queries>
 </manifest>
\ No newline at end of file
diff --git a/app/src/main/aidl/com/hdl/photovoltaic/IUniappAidlInterface.aidl b/app/src/main/aidl/com/hdl/photovoltaic/IUniappAidlInterface.aidl
new file mode 100644
index 0000000..4f4d308
--- /dev/null
+++ b/app/src/main/aidl/com/hdl/photovoltaic/IUniappAidlInterface.aidl
@@ -0,0 +1,8 @@
+// IUniappAidlInterface.aidl
+package com.hdl.photovoltaic;
+
+// Declare any non-default types here with import statements
+
+interface IUniappAidlInterface {
+    void sendMsg(String s);
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/hdl/photovoltaic/services/UniappService.java b/app/src/main/java/com/hdl/photovoltaic/services/UniappService.java
new file mode 100644
index 0000000..2b1706d
--- /dev/null
+++ b/app/src/main/java/com/hdl/photovoltaic/services/UniappService.java
@@ -0,0 +1,49 @@
+package com.hdl.photovoltaic.services;
+
+import android.app.Service;
+import android.content.Intent;
+import android.os.IBinder;
+
+import com.hdl.photovoltaic.IUniappAidlInterface;
+import com.hdl.sdk.link.common.utils.LogUtils;
+
+
+/**
+ * Created by hxb on 2024/12/27.
+ */
+public class UniappService extends Service {
+
+    private static final String TAG = "UniappService";
+
+    public UniappService() {
+
+    }
+
+    IUniappAidlInterface.Stub mIBinder=new IUniappAidlInterface.Stub() {
+
+        @Override
+        public void sendMsg(String mes)  {
+            LogUtils.i(TAG,"鏀跺埌璇锋眰鏁版嵁锛�" + mes);
+        }
+    };
+
+    @Override
+
+    public IBinder onBind(Intent intent) {
+        LogUtils.i(TAG,"onBind: intent = "+intent.toString());
+        return mIBinder;
+    }
+
+    @Override
+
+    public boolean onUnbind(Intent intent) {
+        LogUtils.i(TAG,"onUnbind");
+        return super.onUnbind(intent);
+    }
+
+    @Override
+    public void onDestroy() {
+        LogUtils.i(TAG,"onDestroy");
+        super.onDestroy();
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/hdl/photovoltaic/ui/powerstation/HouseAndDeviceFragment.java b/app/src/main/java/com/hdl/photovoltaic/ui/powerstation/HouseAndDeviceFragment.java
index 8f3c909..5d4cfe4 100644
--- a/app/src/main/java/com/hdl/photovoltaic/ui/powerstation/HouseAndDeviceFragment.java
+++ b/app/src/main/java/com/hdl/photovoltaic/ui/powerstation/HouseAndDeviceFragment.java
@@ -5,6 +5,7 @@
 import android.content.Intent;
 import android.content.pm.PackageManager;
 import android.os.Bundle;
+import android.os.SystemClock;
 import android.view.View;
 import android.view.Window;
 import android.widget.ImageView;
@@ -46,6 +47,7 @@
 import com.hdl.photovoltaic.ui.bean.StatusOverviewBean;
 import com.hdl.photovoltaic.uni.HDLUniMP;
 import com.hdl.photovoltaic.utils.PermissionUtils;
+import com.hdl.photovoltaic.utils.ProcessManagerUtils;
 import com.hdl.photovoltaic.utils.URLEncodingUtils;
 import com.hdl.photovoltaic.widget.DefaultFilteringDialog;
 import com.hdl.photovoltaic.widget.DelayedConfirmationCancelDialog;
@@ -281,7 +283,6 @@
                 HdlResidenceLogic.getInstance().switchHouse(houseIdBean, true);
                 String path = HDLUniMP.UNI_EVENT_OPEN_HOME_DETAILS + "?homeId=" + houseIdBean.getHomeId() + "&homeName=" + houseIdBean.getHomeName() + "&powerStationStatus=" + houseIdBean.getPowerStationStatus();
                 HdlUniLogic.getInstance().openUniMP(path, null);
-
             }
 
             @Override
diff --git a/app/src/main/java/com/hdl/photovoltaic/uni/BSplashView.java b/app/src/main/java/com/hdl/photovoltaic/uni/BSplashView.java
index 1dae918..b14c39f 100755
--- a/app/src/main/java/com/hdl/photovoltaic/uni/BSplashView.java
+++ b/app/src/main/java/com/hdl/photovoltaic/uni/BSplashView.java
@@ -1,15 +1,24 @@
 package com.hdl.photovoltaic.uni;
 
 import android.app.Activity;
+import android.content.ComponentName;
 import android.content.Context;
+import android.content.Intent;
+import android.content.ServiceConnection;
+import android.os.IBinder;
+import android.os.SystemClock;
 import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
 
 import com.hdl.photovoltaic.HDLApp;
+import com.hdl.photovoltaic.IUniappAidlInterface;
 import com.hdl.photovoltaic.R;
 import com.hdl.photovoltaic.config.UserConfigManage;
+import com.hdl.photovoltaic.utils.ProcessManagerUtils;
+
+import java.lang.ref.WeakReference;
 
 import io.dcloud.feature.sdk.Interface.IDCUniMPAppSplashView;
 
@@ -37,9 +46,43 @@
             }
         } catch (Exception ignored) {
         }
+
+
+
+
+        //鍙兘閫氳繃杩欑鏂瑰紡璋冪敤
+        Intent intent = new Intent();
+        intent.setPackage("com.hdl.photovoltaic");
+        intent.setAction("UniappService.ACTION");
+        context.bindService(intent, stringservice, Context.BIND_AUTO_CREATE);
+
         return splashView;
     }
 
+
+    static ServiceConnection stringservice = new ServiceConnection() {
+        private WeakReference<Context> contextWeakReference;
+        @Override
+        public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
+            IUniappAidlInterface iUniappAidlInterface = IUniappAidlInterface.Stub.asInterface(iBinder);
+            try {
+                iUniappAidlInterface.sendMsg("寤虹珛杩炴帴");
+            } catch (Exception e) {
+            }
+        }
+
+        @Override
+        public void onServiceDisconnected(ComponentName componentName) {
+            Log.i("BSplashView", "杩炴帴宸叉柇寮�");
+            Context context = contextWeakReference.get();
+            ProcessManagerUtils.killAllProcess(contextWeakReference.get());
+        }
+
+        public void setContextWeakReference(WeakReference<Context> contextWeakReference) {
+            this.contextWeakReference = contextWeakReference;
+        }
+    };
+
     @Override
     public void onCloseSplash(ViewGroup rootView) {
         if (rootView != null)
diff --git a/app/src/main/java/com/hdl/photovoltaic/utils/ProcessManagerUtils.java b/app/src/main/java/com/hdl/photovoltaic/utils/ProcessManagerUtils.java
new file mode 100644
index 0000000..05649d4
--- /dev/null
+++ b/app/src/main/java/com/hdl/photovoltaic/utils/ProcessManagerUtils.java
@@ -0,0 +1,27 @@
+package com.hdl.photovoltaic.utils;
+
+import android.app.ActivityManager;
+import android.content.Context;
+
+import java.util.List;
+
+/**
+ * Created by hxb on 2024/12/27.
+ */
+public class ProcessManagerUtils {
+
+    //鍒犻櫎褰撳墠搴旂敤鎵�鏈夎繘绋�
+    public static void killAllProcess(Context context) {
+        if(context==null){
+            return;
+        }
+        final ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
+        List<ActivityManager.RunningAppProcessInfo> procList = am.getRunningAppProcesses();
+        for (ActivityManager.RunningAppProcessInfo proc : procList) {
+            if (proc.processName != null && proc.processName.startsWith(context.getPackageName())) {
+                android.os.Process.killProcess(proc.pid);
+                break;
+            }
+        }
+    }
+}

--
Gitblit v1.8.0