stop the service in time

This commit is contained in:
Max Lv
2014-02-24 12:41:14 +08:00
parent 4bbbc6b730
commit a21a4d24fa
5 changed files with 44 additions and 4 deletions
+2 -2
View File
@@ -5,8 +5,8 @@ import sbtandroid._
import sbtandroid.AndroidPlugin._
object App {
val version = "2.1.0"
val versionCode = 61
val version = "2.1.1"
val versionCode = 62
}
object General {
@@ -50,6 +50,7 @@ import android.content.Context
trait BaseService {
var state = State.INIT
var callbackCount = 0
final val callbacks = new RemoteCallbackList[IShadowsocksServiceCallback]
@@ -63,11 +64,20 @@ trait BaseService {
}
override def unregisterCallback(cb: IShadowsocksServiceCallback) {
if (cb != null ) callbacks.unregister(cb)
if (cb != null ) {
callbacks.unregister(cb)
callbackCount -= 1
}
if (callbackCount == 0 && state != State.CONNECTING && state != State.CONNECTED) {
stopBackgroundService()
}
}
override def registerCallback(cb: IShadowsocksServiceCallback) {
if (cb != null) callbacks.register(cb)
if (cb != null) {
callbacks.register(cb)
callbackCount += 1
}
}
override def stop() {
@@ -79,6 +89,7 @@ trait BaseService {
}
}
def stopBackgroundService()
def startRunner(config: Config)
def stopRunner()
def getServiceMode: Int
@@ -326,6 +326,11 @@ class Shadowsocks
override def onServiceDisconnected(name: ComponentName) {
switchButton.setEnabled(false)
try {
bgService.unregisterCallback(callback)
} catch {
case ignored: RemoteException => // Nothing
}
bgService = null
}
}
@@ -526,6 +526,16 @@ class ShadowsocksNatService extends Service with BaseService {
// reset NAT
killProcesses()
// stop the service if no callback registered
if (callbackCount == 0) {
stopSelf()
}
}
override def stopBackgroundService() {
stopRunner()
stopSelf()
}
override def getTag = TAG
@@ -252,6 +252,10 @@ class ShadowsocksVpnService extends VpnService with BaseService {
}
override def onRevoke() {
stopRunner()
}
def killProcesses() {
val sb = new StringBuilder
@@ -373,6 +377,16 @@ class ShadowsocksVpnService extends VpnService with BaseService {
// reset notifications
notificationManager.cancel(1)
// stop the service if no callback registered
if (callbackCount == 0) {
stopSelf()
}
}
override def stopBackgroundService() {
stopRunner()
stopSelf()
}
override def getTag = TAG