• 使用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"/>

  • 相关阅读:
    Socket.IO 客户端 API IO
    约束,在ios8 没问题,在ios7崩溃的问题,UItextField
    在Viewdidload里面给self.View加动画无效的问题
    改变UITextField PlaceHolder的字体和颜色,不影响正常输入
    iOS第三方键盘高度获取不准确问题
    tableViewCell的分割线短一截的问题
    iOS开发中模拟器归档成功,但是真机归档失败的问题
    C语言——数组、字符串
    C语言——函数
    C语言——流程控制
  • 原文地址:https://www.cnblogs.com/ricardo/p/2275028.html
Copyright © 2020-2023  润新知