From b1205b0dfd45e68bc068a9aea38dc597ced7947d Mon Sep 17 00:00:00 2001 From: renwj Date: Tue, 14 Mar 2023 23:12:09 +0800 Subject: [PATCH] =?UTF-8?q?[dev=5Farch=5Fopt=5F3.0]=20=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E9=80=BB=E8=BE=91=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 5 +-- .../launcher/lancet/ObjectHashCodeProxy.java | 38 ------------------- .../launcher/lancet/TextViewSetTextOpt.java | 4 +- .../utilcode/util/ObjectHashCodeUtils.java | 28 ++++++++++++++ .../eagle/core/utilcode/util/ThreadUtils.java | 4 +- .../core/utilcode/util/UiThreadHandler.java | 6 +-- 6 files changed, 36 insertions(+), 49 deletions(-) delete mode 100644 app/src/main/java/com/mogo/launcher/lancet/ObjectHashCodeProxy.java create mode 100644 core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/util/ObjectHashCodeUtils.java diff --git a/app/build.gradle b/app/build.gradle index d4ad5d28ec..5f6910595d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -64,10 +64,7 @@ if (!isAndroidTestBuild()) { memory_leak { enable true } - object_hashcode { - enable true - } - TextView_setTextProxy { + textview_opt { enable true } } diff --git a/app/src/main/java/com/mogo/launcher/lancet/ObjectHashCodeProxy.java b/app/src/main/java/com/mogo/launcher/lancet/ObjectHashCodeProxy.java deleted file mode 100644 index 428a52158a..0000000000 --- a/app/src/main/java/com/mogo/launcher/lancet/ObjectHashCodeProxy.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.mogo.launcher.lancet; - -import androidx.annotation.Keep; -import com.knightboost.lancet.api.Scope; -import com.knightboost.lancet.api.annotations.Group; -import com.knightboost.lancet.api.annotations.ImplementedInterface; -import com.knightboost.lancet.api.annotations.NameRegex; -import com.knightboost.lancet.api.annotations.ReplaceInvoke; -import com.knightboost.lancet.api.annotations.TargetClass; -import com.knightboost.lancet.api.annotations.TargetMethod; -import com.knightboost.lancet.api.annotations.Weaver; -import java.util.concurrent.ConcurrentHashMap; - -@Weaver -@Group("object_hashcode") -@Keep -public class ObjectHashCodeProxy { - - public static final ConcurrentHashMap hashCodes = new ConcurrentHashMap<>(); - - @NameRegex("(com\\.mogo\\.eagle\\.core\\.utilcode\\.util\\.ThreadUtils|com\\.mogo\\.eagle\\.core\\.utilcode\\.util\\.UiThreadHandler)") - @TargetClass(value = "java.lang.Object",scope = Scope.SELF) - @TargetMethod(methodName = "hashCode") - @ReplaceInvoke - public static int hashCodeProxy(Object r) { - Class clazz = r.getClass(); - String className = clazz.getName(); - if (hashCodes.containsKey(className)) { - Integer value = hashCodes.get(className); - if (value != null) { - return value; - } - } - int hashCode = System.identityHashCode(r); - hashCodes.put(className, hashCode); - return hashCode; - } -} diff --git a/app/src/main/java/com/mogo/launcher/lancet/TextViewSetTextOpt.java b/app/src/main/java/com/mogo/launcher/lancet/TextViewSetTextOpt.java index 0a0ed2611f..ad11c130cd 100644 --- a/app/src/main/java/com/mogo/launcher/lancet/TextViewSetTextOpt.java +++ b/app/src/main/java/com/mogo/launcher/lancet/TextViewSetTextOpt.java @@ -3,7 +3,6 @@ package com.mogo.launcher.lancet; import android.os.Looper; import android.util.Log; import android.widget.TextView; - import com.knightboost.lancet.api.Scope; import com.knightboost.lancet.api.annotations.Group; import com.knightboost.lancet.api.annotations.NameRegex; @@ -13,7 +12,7 @@ import com.knightboost.lancet.api.annotations.TargetMethod; import com.knightboost.lancet.api.annotations.Weaver; @Weaver -@Group("TextView_setTextProxy") +@Group("textview_opt") public class TextViewSetTextOpt { @NameRegex("(com\\.mogo|com\\.zhidao|com\\.elegant|com\\.zhidaoauto|com\\.zhjt).*") @@ -31,6 +30,7 @@ public class TextViewSetTextOpt { sb.setLength(sb.length() - 1); } Log.e("ALERT", sb.toString()); + return; } CharSequence old = view.getText(); if (old != null && !old.equals(text)) { diff --git a/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/util/ObjectHashCodeUtils.java b/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/util/ObjectHashCodeUtils.java new file mode 100644 index 0000000000..026c8fcef2 --- /dev/null +++ b/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/util/ObjectHashCodeUtils.java @@ -0,0 +1,28 @@ +package com.mogo.eagle.core.utilcode.util; + +import java.util.concurrent.ConcurrentHashMap; + +/** + * 根据对象的类名,返回一致的hashCode + * 如果缓存中不存在,则创建hashCode并存入缓存 + * 如果缓存中存在,直接用缓存数据 + */ +public class ObjectHashCodeUtils { + + private static final ConcurrentHashMap hashCodes = new ConcurrentHashMap<>(); + + + public static int getHashCodeIfNeed(Object obj) { + if (obj == null) { + return -1; + } + String name = obj.getClass().getName(); + Integer value = hashCodes.get(name); + if (value != null) { + return value; + } + int hashCode = System.identityHashCode(obj); + hashCodes.put(name, hashCode); + return hashCode; + } +} diff --git a/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/util/ThreadUtils.java b/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/util/ThreadUtils.java index 40bc4cc367..42044644ee 100644 --- a/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/util/ThreadUtils.java +++ b/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/util/ThreadUtils.java @@ -66,7 +66,7 @@ public final class ThreadUtils { if (Looper.myLooper() == Looper.getMainLooper()) { r.run(); } else { - int what = r.hashCode(); + int what = ObjectHashCodeUtils.getHashCodeIfNeed(r); HANDLER.removeMessages(what); Message msg = Message.obtain(HANDLER, r); msg.what = what; @@ -75,7 +75,7 @@ public final class ThreadUtils { } public static void runOnUiThreadDelayed(final Runnable r, long delayMillis) { - int what = r.hashCode(); + int what = ObjectHashCodeUtils.getHashCodeIfNeed(r); HANDLER.removeMessages(what); Message msg = Message.obtain(HANDLER, r); msg.what = what; diff --git a/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/util/UiThreadHandler.java b/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/util/UiThreadHandler.java index b3a65e4f68..a8fc918cda 100644 --- a/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/util/UiThreadHandler.java +++ b/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/util/UiThreadHandler.java @@ -11,7 +11,7 @@ public class UiThreadHandler { private UiThreadHandler() { } public static boolean post( Runnable r ) { - int what = r.hashCode(); + int what = ObjectHashCodeUtils.getHashCodeIfNeed(r); sUiHandler.removeMessages(what); Message msg = Message.obtain(sUiHandler, r); msg.what = what; @@ -19,7 +19,7 @@ public class UiThreadHandler { } public static boolean postDelayed( Runnable r, long delayMillis ) { - int what = r.hashCode(); + int what = ObjectHashCodeUtils.getHashCodeIfNeed(r); sUiHandler.removeMessages(what); Message msg = Message.obtain(sUiHandler, r); msg.what = what; @@ -27,7 +27,7 @@ public class UiThreadHandler { } public static void removeCallbacks( Runnable r ) { - int what = r.hashCode(); + int what = ObjectHashCodeUtils.getHashCodeIfNeed(r); sUiHandler.removeMessages(what); } } \ No newline at end of file