From 4d7bf8d7071ecd2639df8ab6edeb7f9a1c476dd7 Mon Sep 17 00:00:00 2001 From: Mygod Date: Sat, 26 Dec 2015 23:46:18 +0800 Subject: [PATCH] Reduce battery usage - Unregister callbacks onStop --- .../shadowsocks/ProfileManagerActivity.scala | 9 ++++++ .../shadowsocks/ServiceBoundContext.scala | 32 ++++++++++--------- .../com/github/shadowsocks/Shadowsocks.scala | 5 +++ 3 files changed, 31 insertions(+), 15 deletions(-) diff --git a/src/main/scala/com/github/shadowsocks/ProfileManagerActivity.scala b/src/main/scala/com/github/shadowsocks/ProfileManagerActivity.scala index 3eef2882..401cbd6d 100644 --- a/src/main/scala/com/github/shadowsocks/ProfileManagerActivity.scala +++ b/src/main/scala/com/github/shadowsocks/ProfileManagerActivity.scala @@ -218,6 +218,15 @@ class ProfileManagerActivity extends AppCompatActivity with OnMenuItemClickListe } } + override def onStart() { + super.onStart() + registerCallback + } + override def onStop() { + super.onStop() + unregisterCallback + } + override def onDestroy { deattachService() super.onDestroy diff --git a/src/main/scala/com/github/shadowsocks/ServiceBoundContext.scala b/src/main/scala/com/github/shadowsocks/ServiceBoundContext.scala index 8a68a761..f50cd606 100644 --- a/src/main/scala/com/github/shadowsocks/ServiceBoundContext.scala +++ b/src/main/scala/com/github/shadowsocks/ServiceBoundContext.scala @@ -13,20 +13,12 @@ trait ServiceBoundContext extends Context { class ShadowsocksServiceConnection extends ServiceConnection { override def onServiceConnected(name: ComponentName, service: IBinder) { bgService = IShadowsocksService.Stub.asInterface(service) - if (callback != null) try { - bgService.registerCallback(callback) - } catch { - case ignored: RemoteException => // Nothing - } + registerCallback ServiceBoundContext.this.onServiceConnected() } override def onServiceDisconnected(name: ComponentName) { if (callback != null) { - try { - if (bgService != null) bgService.unregisterCallback(callback) - } catch { - case ignored: RemoteException => // Nothing - } + unregisterCallback callback = null } ServiceBoundContext.this.onServiceDisconnected() @@ -34,11 +26,25 @@ trait ServiceBoundContext extends Context { } } + def registerCallback = if (bgService != null && callback != null && !callbackRegistered) try { + bgService.registerCallback(callback) + callbackRegistered = true + } catch { + case ignored: RemoteException => // Nothing + } + def unregisterCallback = if (bgService != null && callback != null && callbackRegistered) try { + bgService.unregisterCallback(callback) + callbackRegistered = false + } catch { + case ignored: RemoteException => // Nothing + } + def onServiceConnected() = () def onServiceDisconnected() = () private var callback: IShadowsocksServiceCallback.Stub = _ private var connection: ShadowsocksServiceConnection = _ + private var callbackRegistered: Boolean = _ // Variables var bgService: IShadowsocksService = _ @@ -60,11 +66,7 @@ trait ServiceBoundContext extends Context { def deattachService() { if (bgService != null) { if (callback != null) { - try { - bgService.unregisterCallback(callback) - } catch { - case ignored: RemoteException => // Nothing - } + unregisterCallback callback = null } if (connection != null) { diff --git a/src/main/scala/com/github/shadowsocks/Shadowsocks.scala b/src/main/scala/com/github/shadowsocks/Shadowsocks.scala index 2c739d72..2f949e41 100644 --- a/src/main/scala/com/github/shadowsocks/Shadowsocks.scala +++ b/src/main/scala/com/github/shadowsocks/Shadowsocks.scala @@ -461,8 +461,13 @@ class Shadowsocks preferences.update(profile) } + override def onStart() { + super.onStart() + registerCallback + } override def onStop() { super.onStop() + unregisterCallback clearDialog() }