zoukankan      html  css  js  c++  java
  • 使用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"/>

  • 相关阅读:
    POJ 1286 Necklace of Beads(Polya简单应用)
    《Nosql精粹》—— 读后总结
    基于ELK的数据分析实践——满满的干货送给你
    ELK5.0安装教程
    Oozie分布式工作流——EL表达式
    《分布式Java应用与实践》—— 后面两章
    Oozie分布式工作流——从理论和实践分析使用节点间的参数传递
    Oozie分布式工作流——Action节点
    Oozie分布式工作流——流控制
    图文并茂 —— 基于Oozie调度Sqoop
  • 原文地址:https://www.cnblogs.com/ricardo/p/2275028.html
Copyright © 2011-2022 走看看