Service的两种启动方式和区别? - 巴中市万纵网络科技有限公司-新闻中心
雷竞技推荐码raybet网投雷竞技平台风控有限公司
首页 | 联系方式 | 加入收藏 | 设为首页 | 手机站
  • 网站首页
  • 公司简介
  • 产品展示
  • 新闻中心
  • 常见问题
  • 联系我们
  • 产品目录

    联系方式

    联系人:业务部
    电话: 00126-83979
    邮箱:service@q235cwfgg.com

    当前位置:首页 >> 新闻中心 >> 正文

    Service的两种启动方式和区别?

    摘要:Service的两种启动方式和区别?
    第一种启动方式:startService(Intent)

    启动服务 生命周期方法流程:onCreate --- > onStartCommand

    关闭服务:stopService(Intent)
    关闭服务 生命周期方法流程 :onDestory

    第二种启动方式:bindService(Intent , ServiceConnection , flag)

    启动服务 生命周期方法流程:onCreate --- > onBind

    关闭服务:stopService(Intent)
    关闭服务 生命周期方法流程 :onUnBind ----> onDestory

    区别:

    startService启动Service ,Service有独立的生命周期,不依赖该组建;
    多次调用startService方法,会重复调用onStartCommand方法;
    必须通过stopService或者stopSelf来停止服务(IntentService会自动调用stopSelf方法)

    bindService启动Service,多次调用此方法,只会调用一次onBind方法;
    bindService,Service 依赖于此组件,该组件销毁后,Service也会随之销毁。

    扩展:
    1,同一个Service,先启动startService,然后在bindService,如何把服务停掉?

    无论被startService调用多少次,如需要stopService或者stopSelf方法 一次;
    调用n次bindService,必须调用n次unBindService方法;
    因此,需要调用一次stopService(或者stopSelf)方法,和n次unBindService方法,执行顺序没有要求,
    最后一个stopService或者unBindService方法会导致Service的 onDestory执行。

    2,Service的生命方法是运行在那个线程中?

    Service默认运行在主线程,所以其生命方法也是运行在主线程中,如果需要在Service中进行耗时操作,必须另起线程(或者使用IntentService)否则会引起ANR。