diff --git a/app/src/main/java/com/termux/app/TermuxActivity.java b/app/src/main/java/com/termux/app/TermuxActivity.java index 0c9f74125b..90e48804c7 100644 --- a/app/src/main/java/com/termux/app/TermuxActivity.java +++ b/app/src/main/java/com/termux/app/TermuxActivity.java @@ -354,7 +354,9 @@ public void onDestroy() { if (mTermuxService != null) { // Do not leave service and session clients with references to activity. - mTermuxService.unsetTermuxTerminalSessionClient(); + // Pass our own client so we don't clobber a newer activity's client if we are being + // destroyed while a new instance has already bound (e.g. after home-launcher restart). + mTermuxService.unsetTermuxTerminalSessionClient(mTermuxTerminalSessionActivityClient); mTermuxService = null; } diff --git a/app/src/main/java/com/termux/app/TermuxService.java b/app/src/main/java/com/termux/app/TermuxService.java index 8025d0bd2c..b80d11883e 100644 --- a/app/src/main/java/com/termux/app/TermuxService.java +++ b/app/src/main/java/com/termux/app/TermuxService.java @@ -775,6 +775,13 @@ public synchronized void unsetTermuxTerminalSessionClient() { mTermuxTerminalSessionActivityClient = null; } + /** Only unsets the client if it matches {@code client}, so a newly bound activity's client is + * not clobbered by a previous activity's {@code onDestroy()}. */ + public synchronized void unsetTermuxTerminalSessionClient(TermuxTerminalSessionActivityClient client) { + if (mTermuxTerminalSessionActivityClient == client) + unsetTermuxTerminalSessionClient(); + } +