您的位置:首页 > 大数据 > 人工智能

使用scala trait 自动 绑定service 到 Activity 或其他service

2011-12-03 22:20 465 查看
得益于 scala trait 的链式操作

假设你有一个UtilService 内容如下

class UtilService extends Service {
utilService =>               // UtilService.this 别名

def doSomething(xx: Any) = {
//  your code
}

def onBind(p1: Intent) = new UtilServiceBinder

class UtilServiceBinder extends Binder {
def getService = utilService
}

}


添加一个 base trait MixinUtilServiceBase

protected trait MixinUtilServiceBase {

lazy val utilService = {
assert(utilServiceHolder != null); utilServiceHolder
}    // utilService 将混入(mixin) 到 activity 或 service
private var utilServiceHolder: UtilService = null
protected val utilServiceConnection = new ServiceConnection {
def onServiceConnected(className: ComponentName, binder: IBinder) {
utilServiceHolder = binder.asInstanceOf[UtilService#UtilServiceBinder].getService
}

def onServiceDisconnected(className: ComponentName) {
// do something
}
}

}


添加一个trait ActivityMixinUtilService



trait ActivityMixinUtilService extends Activity with MixinUtilServiceBase {
context =>

abstract override def onCreate(savedInstanceState: Bundle) {
super.onCreate(savedInstanceState)
bindService(new Intent(context, classOf[UtilService]), utilServiceConnection, Context.BIND_AUTO_CREATE)
}

abstract override def onDestroy() {
unbindService(utilServiceConnection)
super.onDestroy()
}
}


现在你可以在你自己的Activity 内使用 ActivityMixinUtilService trait 了, 想下面这样

class Main extends Activity with ActivityMixinUtilService {
context =>

def doSome() {
utilService.doSomething() // 现在 utilService 混合(mixin) 到了main Activity
}
}


extends Activity 可以省略掉

class Main extends ActivityMixinUtilService


像Activity一样 ServiceMixinUtilService

trait ServiceMixinUtilService extends Service with MixinUtilServiceBase {
context =>

abstract override def onCreate() {
super.onCreate()
bindService(new Intent(context, classOf[UtilService]), utilServiceConnection, Context.BIND_AUTO_CREATE)
}

abstract override def onDestroy() {
unbindService(utilServiceConnection)
super.onDestroy()
}
}


确保添加UtilService 到AndroidManifest.xml

<service android:name=".services.UtilService"/>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐