diff --git a/termux/termux-app/src/main/java/com/termux/app/TermuxService.java b/termux/termux-app/src/main/java/com/termux/app/TermuxService.java index db2f3341a..345ec9bf3 100644 --- a/termux/termux-app/src/main/java/com/termux/app/TermuxService.java +++ b/termux/termux-app/src/main/java/com/termux/app/TermuxService.java @@ -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(); } diff --git a/termux/termux-app/src/main/java/com/termux/app/terminal/TermuxTerminalSessionServiceClient.java b/termux/termux-app/src/main/java/com/termux/app/terminal/TermuxTerminalSessionServiceClient.java index e943bb3ad..2ad02acdf 100644 --- a/termux/termux-app/src/main/java/com/termux/app/terminal/TermuxTerminalSessionServiceClient.java +++ b/termux/termux-app/src/main/java/com/termux/app/terminal/TermuxTerminalSessionServiceClient.java @@ -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; + } }