diff --git a/mobile/src/main/java/com/github/shadowsocks/MainActivity.kt b/mobile/src/main/java/com/github/shadowsocks/MainActivity.kt index 34506e4b..c7b2e2d7 100644 --- a/mobile/src/main/java/com/github/shadowsocks/MainActivity.kt +++ b/mobile/src/main/java/com/github/shadowsocks/MainActivity.kt @@ -196,8 +196,8 @@ class MainActivity : AppCompatActivity(), ShadowsocksConnection.Interface, Drawe override fun onServiceConnected(service: IShadowsocksService) = changeState(service.state) override fun onServiceDisconnected() = changeState(BaseService.IDLE) override fun binderDied() { + super.binderDied() app.handler.post { - connection.disconnect() Executable.killAll() connection.connect() } diff --git a/mobile/src/main/java/com/github/shadowsocks/ShadowsocksConnection.kt b/mobile/src/main/java/com/github/shadowsocks/ShadowsocksConnection.kt index 8fecccd1..fc248fc1 100644 --- a/mobile/src/main/java/com/github/shadowsocks/ShadowsocksConnection.kt +++ b/mobile/src/main/java/com/github/shadowsocks/ShadowsocksConnection.kt @@ -48,7 +48,10 @@ class ShadowsocksConnection(private val instance: Interface) : ServiceConnection * Different from Android framework, this method will be called even when you call `detachService`. */ fun onServiceDisconnected() { } - override fun binderDied() { } + override fun binderDied() { + connection.service = null + connection.disconnect() + } } private var connectionActive = false @@ -109,6 +112,7 @@ class ShadowsocksConnection(private val instance: Interface) : ServiceConnection connectionActive = false if (instance.listenForDeath) binder?.unlinkToDeath(instance, 0) binder = null + service?.stopListeningForBandwidth(instance.serviceCallback) service = null } }