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