展会信息港展会大全

使用scala trait自动 绑定service到Activity或其他service
来源:互联网   发布日期:2016-01-13 22:15:12   浏览:1654次  

导读:得益于 scala trait 的链式操作假设你有一个UtilService内容如下01classUtilServiceextendsService {02utilService =// UtilService.this 别名0304def doSomething(xx: Any) = {05// your code06}......

得益于 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"/>

赞助本站

人工智能实验室

相关热词: scala trait 绑定service Activit

AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港