android四大基础组件--Service生命周期详解

android四大基础组件--ServiceServiceandroid

生命周期详解多线程


一、Service的生命周期:异步


I> 在非绑定Service状况下,只有oncreate(),onStartCommand(),onDestory()方法状况下:ide

    

  操做方法对应生命周期一:学习

   a、【执行startService(Intent)优化

   执行生命周期方法:oncreate()--->onStartCommand();spa

   b、【执行stopService(Intent)】 线程

   执行生命周期方法:onDestory();orm


  操做方法对应生命周期二: blog

   a、【执行startService(Intnet)

   执行生命周期方法:oncreate()--->onStartCommand();

   b、【执行返回键】--->【执行startService(Intnet)

   执行生命周期方法:onStartCommand();

   c、【执行stopService(Intent)

   执行生命周期方法:onDestory();

   d、【执行startService(Intnet)

   执行生命周期方法:oncreate()--->onStartCommand();

   e、【执行stopService(Intent)】--->【执行返回键】--->【执行startService(Intnet)】    执行生命周期方法:oncreate()--->onStartCommand()

 

  总结:

  只有当service被首次建立的时候才会执行oncreate()方法,同个service被屡次启动的时候就不会调用oncreate()方法,可是每次的启动都会调用onstartCommand()方法;


II> 在绑定Service状况下,只有onCreate(),onBind(Intent intent),onUnbind(Intent intent),onDestroy()方法状况下:


  操做方法对应生命周期:

  a、【执行bindService(intent,conn, Service.BIND_AUTO_CREATE)

  执行生命周期方法:oncreate()--->onBind()---> ServiceConnection类的onServiceConnected()(做用:activity与service创建链接的方法);

  b、【执行unbindService(conn)

  执行生命周期方法:onUnbind()--->onDestory();


wKiom1gb9faD_DeNAAA_NBiAmp0899.png

wKioL1gb9fazSqZTAAA2SQg7oYQ507.png

wKioL1gb9faz32vIAABF_mdumLs242.png



III>绑定service和非绑定service混合使用执行的生命周期


  操做方法:

  a、【执行startService

  执行生命周期方法:onCreate()-->onStartCommand();

  b、【执行bindService

  执行生命周期方法:onBind()--->onServiceConnected();

  c、【执行onUnbindService

  执行生命周期方法:onUnbind();

  d、【执行bindService

  执行生命周期方法:onServiceConnected()-->onRebind();

  e、【执行onUnbindService

  执行生命周期方法:onUnbind;

  f、【执行stopService

  执行生命周期方法:onDestory()


wKiom1gb9lCxmcaXAABgDsGmlac359.png


调用Service以下:


wKioL1gb9pWSge5RAACUo_Kt2GE739.png

执行的打印结果以下:

wKioL1gb9uDDNxQMAABIuCdNKRw029.png


总结:

一、当service执行startService操做之后,执行bindService,在service被绑定之后没有解绑的状况下,去执行stopService,此时不会触发Service的onDestory方法,可是解除绑定之后,继续执行stopService将触发onDestory方法。

二、ServiceConnection类中,若是service意外的发生中断,则此类中的onServiceDisconnected方法将会被调用执行;正常的中断(如:执行unbindService方法),则此类中的onServiceDisconnected方法不会被调用。

三、若是一个Service使用两种模式开启(bindService和startService),则必须保证两个生命周期都结束,才能执行onDestory方法。例如:bindxx--》startxx--》stopxx 或者 startxx--》bindxx--》stopxx,以上两种状况均不会执行onDestory()方法。

四、service与activity使用bindService进行绑定,并不能将service 的生命周期与activity的生命周期绑定。在部分状况下,取消绑定的时候也仅仅是取消service与activity之间的关系,并不能中止该service。

五、service中并不可以执行耗时操做,由于service与所在的应用位于同一个进程,而且service也并非一条新的线程,若是执行耗时操做,将会出现ANR(Application Not Responding)异常。



二、IntentService执行原理


a>使用队列来管理Intent请求,每当客户端代码经过Intent请求启动IntentService时,IntentService将会把Intent加入队列,而后开启一条新的线程来处理该Intent;


b>对于异步 的startService()请求,IntentService会按次序一次处理队列中的Intent,该线程保证同一时刻只处理一个Intent;


c>IntentService会建立单独的线程来处理onHandleIntent()方法实现的代码,所以开发者无需处理多线程的问题;


d>当消息请求处理完之后IntentService会自动中止,开发者无需调用stopSelf()方法中止service;


e>为Service的onBind()方法提供了默认的实现,默认实现的onBind()返回null;


f>为Service的onstartCommand()方法也提供了默认的实现,该实现会将请求Intent添加到队列中。


三、Service和IntentServiceActivity的最主要区别

IntentService里面可以执行耗时操做,而不会形成UI线程阻塞。



总结:

   上述文章经过在android studio中的运行,完整的展示了Service经常使用生命周期方法的执行过程,经过了解以上的过程可以方便咱们程序的开发,在适当的生命周期,执行对应的方法,这样有助于程序的优化、方便后期的维护和减小内存没必要要的浪费,更有助于咱们对android底层学习。同时也对Service和IntentService进行了比较,以及IntentService的执行原理。不足之处,请你们不惜赐教。

相关文章
相关标签/搜索