mirror of
https://gitee.com/zhangsken/AndroidIDE.git
synced 2026-10-16 07:49:44 +08:00
fix(terminal): memory leak in TermuxService.LocalBinder
This commit is contained in:
@@ -49,6 +49,8 @@ import com.termux.terminal.TerminalEmulator;
|
||||
import com.termux.terminal.TerminalSession;
|
||||
import com.termux.terminal.TerminalSessionClient;
|
||||
|
||||
import java.io.Closeable;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@@ -68,11 +70,20 @@ import java.util.List;
|
||||
public final class TermuxService extends Service implements AppShell.AppShellClient, TermuxSession.TermuxSessionClient {
|
||||
|
||||
/** This service is only bound from inside the same process and never uses IPC. */
|
||||
class LocalBinder extends Binder {
|
||||
public final TermuxService service = TermuxService.this;
|
||||
static class LocalBinder extends Binder implements Closeable {
|
||||
public TermuxService service;
|
||||
|
||||
LocalBinder(final TermuxService service) {
|
||||
this.service = service;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() {
|
||||
service = null;
|
||||
}
|
||||
}
|
||||
|
||||
private final IBinder mBinder = new LocalBinder();
|
||||
private final LocalBinder mBinder = new LocalBinder(this);
|
||||
|
||||
private final Handler mHandler = new Handler();
|
||||
|
||||
@@ -215,6 +226,10 @@ public final class TermuxService extends Service implements AppShell.AppShellCli
|
||||
private void requestStopService() {
|
||||
Logger.logDebug(LOG_TAG, "Requesting to stop service");
|
||||
runStopForeground();
|
||||
|
||||
mBinder.close();
|
||||
mTermuxTerminalSessionServiceClient.close();
|
||||
|
||||
stopSelf();
|
||||
}
|
||||
|
||||
|
||||
+9
-2
@@ -9,13 +9,16 @@ import com.termux.shared.termux.shell.command.runner.terminal.TermuxSession;
|
||||
import com.termux.shared.termux.terminal.TermuxTerminalSessionClientBase;
|
||||
import com.termux.terminal.TerminalSession;
|
||||
import com.termux.terminal.TerminalSessionClient;
|
||||
import java.io.Closeable;
|
||||
import java.io.IOException;
|
||||
|
||||
/** The {@link TerminalSessionClient} implementation that may require a {@link Service} for its interface methods. */
|
||||
public class TermuxTerminalSessionServiceClient extends TermuxTerminalSessionClientBase {
|
||||
public class TermuxTerminalSessionServiceClient extends TermuxTerminalSessionClientBase implements
|
||||
Closeable {
|
||||
|
||||
private static final String LOG_TAG = "TermuxTerminalSessionServiceClient";
|
||||
|
||||
private final TermuxService mService;
|
||||
private TermuxService mService;
|
||||
|
||||
public TermuxTerminalSessionServiceClient(TermuxService service) {
|
||||
this.mService = service;
|
||||
@@ -28,4 +31,8 @@ public class TermuxTerminalSessionServiceClient extends TermuxTerminalSessionCli
|
||||
termuxSession.getExecutionCommand().mPid = pid;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() {
|
||||
mService = null;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user