Commit fc3d26d6 authored by chentao's avatar chentao

Fix binder ipc issue when process died unexpected

parent 1bb3a6bf
......@@ -4,16 +4,15 @@ import android.content.{ComponentName, Context, Intent, ServiceConnection}
import android.os.{RemoteException, IBinder}
import com.github.shadowsocks.aidl.{IShadowsocksServiceCallback, IShadowsocksService}
import com.github.shadowsocks.utils.Action
import com.github.shadowsocks.utils.Utils
/**
* @author Mygod
*/
trait ServiceBoundContext extends Context {
trait ServiceBoundContext extends Context { outer =>
class ShadowsocksServiceConnection extends ServiceConnection {
override def onServiceConnected(name: ComponentName, service: IBinder) {
bgService = IShadowsocksService.Stub.asInterface(service)
bgService.asBinder().linkToDeath(new ShadowsocksDeathRecipient(outer), 0)
registerCallback
ServiceBoundContext.this.onServiceConnected()
}
......@@ -33,11 +32,12 @@ trait ServiceBoundContext extends Context {
} catch {
case ignored: RemoteException => // Nothing
}
def unregisterCallback = if (bgService != null && callback != null && callbackRegistered) try {
bgService.unregisterCallback(callback)
callbackRegistered = false
} catch {
case ignored: RemoteException => // Nothing
case ignored: RemoteException => callbackRegistered = false
}
def onServiceConnected() = ()
......
......@@ -377,7 +377,11 @@ class Shadowsocks
})
updateTraffic(0, 0, 0, 0)
// Bind to the service
bindToService()
}
// Bind to the service
def bindToService() {
handler.post(() => attachService)
}
......
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