fix: GlobalStardustConsole memory leak

This commit is contained in:
hyb1996
2017-10-28 16:05:29 +08:00
parent 716a44fb6f
commit 3923daeaf8

View File

@@ -65,7 +65,7 @@ public class StardustConsole extends AbstractConsole {
private AtomicInteger mIdCounter = new AtomicInteger(0); private AtomicInteger mIdCounter = new AtomicInteger(0);
private ResizableExpandableFloatyWindow mFloatyWindow; private ResizableExpandableFloatyWindow mFloatyWindow;
private ConsoleFloaty mConsoleFloaty; private ConsoleFloaty mConsoleFloaty;
private LogListener mLogListener; private WeakReference<LogListener> mLogListener;
private UiHandler mUiHandler; private UiHandler mUiHandler;
private BlockingQueue<String> mInput = new ArrayBlockingQueue<>(1); private BlockingQueue<String> mInput = new ArrayBlockingQueue<>(1);
private WeakReference<ConsoleView> mConsoleView; private WeakReference<ConsoleView> mConsoleView;
@@ -96,8 +96,9 @@ public class StardustConsole extends AbstractConsole {
} }
} }
public void setLogListener(LogListener logListener) { public void setLogListener(LogListener logListener) {
mLogListener = logListener; mLogListener = new WeakReference<>(logListener);
} }
public ArrayList<Log> getAllLogs() { public ArrayList<Log> getAllLogs() {
@@ -111,8 +112,8 @@ public class StardustConsole extends AbstractConsole {
if (mGlobalConsole != null) { if (mGlobalConsole != null) {
mGlobalConsole.println(level, charSequence); mGlobalConsole.println(level, charSequence);
} }
if (mLogListener != null) { if (mLogListener != null && mLogListener.get() != null) {
mLogListener.onNewLog(log); mLogListener.get().onNewLog(log);
} }
} }
@@ -124,8 +125,8 @@ public class StardustConsole extends AbstractConsole {
if (mGlobalConsole != null) { if (mGlobalConsole != null) {
mGlobalConsole.print(level, charSequence); mGlobalConsole.print(level, charSequence);
} }
if (mLogListener != null) { if (mLogListener != null && mLogListener.get() != null) {
mLogListener.onNewLog(log); mLogListener.get().onNewLog(log);
} }
} }
@@ -133,8 +134,8 @@ public class StardustConsole extends AbstractConsole {
@Override @Override
public void clear() { public void clear() {
mLogs.clear(); mLogs.clear();
if (mLogListener != null) { if (mLogListener != null && mLogListener.get() != null) {
mLogListener.onLogClear(); mLogListener.get().onLogClear();
} }
} }