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

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

转载于:https://my.oschina.net/ricardo/blog/40334

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值