得益于 scala trait 的链式操作
假设你有一个UtilService 内容如下
01
class UtilService extends Service {
02
utilService =>// UtilService.this 别名
03
04
def doSomething(xx: Any) = {
05
//your code
06
}
07
08
def onBind(p1: Intent) = new UtilServiceBinder
09
10
class UtilServiceBinder extends Binder {
11
def getService = utilService
12
}
13
14
}
添加一个 base trait MixinUtilServiceBase
01
protected trait MixinUtilServiceBase {
02
03
lazy val utilService = {
04
assert(utilServiceHolder != null); utilServiceHolder
05
}// utilService 将混入(mixin) 到 activity 或 service
06
private var utilServiceHolder: UtilService = null
07
protected val utilServiceConnection = new ServiceConnection {
08
def onServiceConnected(className: ComponentName, binder: IBinder) {
09
utilServiceHolder = binder.asInstanceOf[UtilService#UtilServiceBinder].getService
10
}
11
12
def onServiceDisconnected(className: ComponentName) {
13
// do something
14
}
15
}
16
17
}
添加一个trait ActivityMixinUtilService
01
trait ActivityMixinUtilService extends Activity with MixinUtilServiceBase {
02
context =>
03
04
abstract override def onCreate(savedInstanceState: Bundle) {
05
super.onCreate(savedInstanceState)
06
bindService(new Intent(context, classOf[UtilService]), utilServiceConnection, Context.BIND_AUTO_CREATE)
07
}
08
09
abstract override def onDestroy() {
10
unbindService(utilServiceConnection)
11
super.onDestroy()
12
}
13
}
现在你可以在你自己的Activity 内使用 ActivityMixinUtilService trait 了, 想下面这样
1
class Main extends Activity with ActivityMixinUtilService {
2
context =>
3
4
def doSome() {
5
utilService.doSomething() // 现在 utilService 混合(mixin) 到了main Activity
6
}
7
}
extends Activity 可以省略掉
1
class Main extends ActivityMixinUtilService
像Activity一样 ServiceMixinUtilService
01
trait ServiceMixinUtilService extends Service with MixinUtilServiceBase {
02
context =>
03
04
abstract override def onCreate() {
05
super.onCreate()
06
bindService(new Intent(context, classOf[UtilService]), utilServiceConnection, Context.BIND_AUTO_CREATE)
07
}
08
09
abstract override def onDestroy() {
10
unbindService(utilServiceConnection)
11
super.onDestroy()
12
}
13
}
确保添加UtilService 到AndroidManifest.xml
1
<service android:name=".services.UtilService"/>