From 3923daeaf85477a3088a8baba920ebd44a5edb4f Mon Sep 17 00:00:00 2001 From: hyb1996 <946994919@qq.com> Date: Sat, 28 Oct 2017 16:05:29 +0800 Subject: [PATCH] fix: GlobalStardustConsole memory leak --- .../autojs/core/console/StardustConsole.java | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/autojs/src/main/java/com/stardust/autojs/core/console/StardustConsole.java b/autojs/src/main/java/com/stardust/autojs/core/console/StardustConsole.java index c1462d2f..2a0f0937 100644 --- a/autojs/src/main/java/com/stardust/autojs/core/console/StardustConsole.java +++ b/autojs/src/main/java/com/stardust/autojs/core/console/StardustConsole.java @@ -65,7 +65,7 @@ public class StardustConsole extends AbstractConsole { private AtomicInteger mIdCounter = new AtomicInteger(0); private ResizableExpandableFloatyWindow mFloatyWindow; private ConsoleFloaty mConsoleFloaty; - private LogListener mLogListener; + private WeakReference mLogListener; private UiHandler mUiHandler; private BlockingQueue mInput = new ArrayBlockingQueue<>(1); private WeakReference mConsoleView; @@ -96,8 +96,9 @@ public class StardustConsole extends AbstractConsole { } } + public void setLogListener(LogListener logListener) { - mLogListener = logListener; + mLogListener = new WeakReference<>(logListener); } public ArrayList getAllLogs() { @@ -111,8 +112,8 @@ public class StardustConsole extends AbstractConsole { if (mGlobalConsole != null) { mGlobalConsole.println(level, charSequence); } - if (mLogListener != null) { - mLogListener.onNewLog(log); + if (mLogListener != null && mLogListener.get() != null) { + mLogListener.get().onNewLog(log); } } @@ -124,8 +125,8 @@ public class StardustConsole extends AbstractConsole { if (mGlobalConsole != null) { mGlobalConsole.print(level, charSequence); } - if (mLogListener != null) { - mLogListener.onNewLog(log); + if (mLogListener != null && mLogListener.get() != null) { + mLogListener.get().onNewLog(log); } } @@ -133,8 +134,8 @@ public class StardustConsole extends AbstractConsole { @Override public void clear() { mLogs.clear(); - if (mLogListener != null) { - mLogListener.onLogClear(); + if (mLogListener != null && mLogListener.get() != null) { + mLogListener.get().onLogClear(); } }