Commit 4d7bf8d7 authored by Mygod's avatar Mygod

Reduce battery usage - Unregister callbacks onStop

parent 0018a7ca
...@@ -218,6 +218,15 @@ class ProfileManagerActivity extends AppCompatActivity with OnMenuItemClickListe ...@@ -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 { override def onDestroy {
deattachService() deattachService()
super.onDestroy super.onDestroy
......
...@@ -13,20 +13,12 @@ trait ServiceBoundContext extends Context { ...@@ -13,20 +13,12 @@ trait ServiceBoundContext extends Context {
class ShadowsocksServiceConnection extends ServiceConnection { class ShadowsocksServiceConnection extends ServiceConnection {
override def onServiceConnected(name: ComponentName, service: IBinder) { override def onServiceConnected(name: ComponentName, service: IBinder) {
bgService = IShadowsocksService.Stub.asInterface(service) bgService = IShadowsocksService.Stub.asInterface(service)
if (callback != null) try { registerCallback
bgService.registerCallback(callback)
} catch {
case ignored: RemoteException => // Nothing
}
ServiceBoundContext.this.onServiceConnected() ServiceBoundContext.this.onServiceConnected()
} }
override def onServiceDisconnected(name: ComponentName) { override def onServiceDisconnected(name: ComponentName) {
if (callback != null) { if (callback != null) {
try { unregisterCallback
if (bgService != null) bgService.unregisterCallback(callback)
} catch {
case ignored: RemoteException => // Nothing
}
callback = null callback = null
} }
ServiceBoundContext.this.onServiceDisconnected() ServiceBoundContext.this.onServiceDisconnected()
...@@ -34,11 +26,25 @@ trait ServiceBoundContext extends Context { ...@@ -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 onServiceConnected() = ()
def onServiceDisconnected() = () def onServiceDisconnected() = ()
private var callback: IShadowsocksServiceCallback.Stub = _ private var callback: IShadowsocksServiceCallback.Stub = _
private var connection: ShadowsocksServiceConnection = _ private var connection: ShadowsocksServiceConnection = _
private var callbackRegistered: Boolean = _
// Variables // Variables
var bgService: IShadowsocksService = _ var bgService: IShadowsocksService = _
...@@ -60,11 +66,7 @@ trait ServiceBoundContext extends Context { ...@@ -60,11 +66,7 @@ trait ServiceBoundContext extends Context {
def deattachService() { def deattachService() {
if (bgService != null) { if (bgService != null) {
if (callback != null) { if (callback != null) {
try { unregisterCallback
bgService.unregisterCallback(callback)
} catch {
case ignored: RemoteException => // Nothing
}
callback = null callback = null
} }
if (connection != null) { if (connection != null) {
......
...@@ -461,8 +461,13 @@ class Shadowsocks ...@@ -461,8 +461,13 @@ class Shadowsocks
preferences.update(profile) preferences.update(profile)
} }
override def onStart() {
super.onStart()
registerCallback
}
override def onStop() { override def onStop() {
super.onStop() super.onStop()
unregisterCallback
clearDialog() clearDialog()
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment