使用scala trait 自动 绑定service 到 Activity 或其他service
2011-12-03 22:20
465 查看
得益于 scala trait 的链式操作
假设你有一个UtilService 内容如下
添加一个 base trait MixinUtilServiceBase
添加一个trait ActivityMixinUtilService
现在你可以在你自己的Activity 内使用 ActivityMixinUtilService trait 了, 想下面这样
extends Activity 可以省略掉
像Activity一样 ServiceMixinUtilService
确保添加UtilService 到AndroidManifest.xml
假设你有一个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"/>
相关文章推荐
- EventBus 详细使用教程[在Activity、Service、Receiver中Post](精简版)
- android开机自动启动service或者activity
- Service绑定Activity
- scala学习手记33 - 使用trait进行装饰
- mysql5启动报错:本地计算机 上的 MySQL 服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止
- [置顶] 【scala 特质】Scala的Trait特质使用
- Activity使用Dialog样式导致点击空白处自动关闭的问题
- 关于5.7.12Mysq 启动失败,本地计算机上的MySQL服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止?
- 服务的定义,使用和绑定(FileManagerService)
- Activity使用Dialog样式导致点击空白处自动关闭的问题
- 第84章、Service之二(与Activity绑定)(从零开始学Android)
- 使用Handler实现Service和Activity之间的双向通信
- android使用Messenger绑定Service的多种实现方法
- 【错误解决】本地计算机上的mysql服务启动停止后,某些服务在未由其他服务或程序使用时将自动停止
- Service基础Activity与Service绑定
- MySQL 安装和启动服务,“本地计算机 上的 MySQL 服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止。”
- Activity. Intent. Service. Broadcast的使用
- Android多用户系列:跨用户启动(绑定)Service、启动Activity、访问ContentProvider
- 使用android中的AIDL让Service与Activity通信(service回调activity)
- android开发之Activity与Service绑定