stop the service in time
This commit is contained in:
+2
-2
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user