现在的位置: 首页 > 综合 > 正文

android service生命周期

2014年02月07日 ⁄ 综合 ⁄ 共 3059字 ⁄ 字号 评论关闭

1、Android service如果是由activity bindService启动,则service自己的onCreate(),onBind(),onServiceConnected()按照这个顺序被调用,则在该activity调用onDestroy()方法时不论是否调用unBindService方法,service自己的onUnbind方法都会被调用,但是如果不调用unBindService方法,则在bindService方法中会抛android.app.ServiceConnectionLeaked:
******.MainActivity has leaked ServiceConnection 异常,这中情况不会影响service及activity

2、bindService及unBindService方法可多次调用,在调用unBindService方法前连续调bindService对应的onBind()只会调用一次,连续多次调用unBindService对应的onUnbind方法只会调用一次
3、第一次调用startService-->bindeService-->unBindService对应的调service方法为onCreate()->onBind()->onServiceConnected()->onStart()(其中startService与bindeService的顺序没有关系,onStart在onBind()前还是后可能是受service 的onCreate()方法执行时间影响)
4、在Service stop前不论是在当前activity还是其他对象中继续调用startService-->bindeService-->unBindService这些方法对应的调service方法为onStart()->onServiceConnected()(在同一对象如果调过bindService后在调用unBindService前重复调bindService,则onServiceConnected()方法不会重复调用),不会再调用onBind()方法和onUnbind()方法。

5、在service的生命周期中onBind()方法和onUnbind()只会被调用一次即使在不同对象调了多次bindeService和unBindService。
6、如果在activity1中startService,在activity2中onBindServie,则在activity2调unBindService前在activity1中调stopService则不能立即调service的onDestroy,只有在activity2调unBindService后才会调service的onDestroy.如果只在activity1中startService和onBindServie则可在unBindService前调stopService使service的onDestroy被调用。

总结:startService和bindService及stopService和unBindService都可以多次调用,只是在Service关闭之前重复调用startService方法会重复调service的onStart(),重复调bindeService只会调onServiceConnected()而不会调onBind(),重复调unBindService是不会调onUnbind()方法的。
      stopService只有在所有调过bindServie的对象(调stopService的对象除外,可不用unBindeService)中都调了unBindService以后调才能使service的onDestroy被调用。
      onServiceDisconnected方法在意外连接断开或者系统资源不够的时候调用,或者service stop后,则之前调了几次unBindService则调几次onServiceDisconnected方法

 

以上过程全部在2.3中测试得到的结果

2、bindService及unBindService方法可多次调用,在调用unBindService方法前连续调bindService对应的onBind()只会调用一次,连续多次调用unBindService对应的onUnbind方法只会调用一次
3、第一次调用startService-->bindeService-->unBindService对应的调service方法为onCreate()->onBind()->onServiceConnected()->onStart()(其中startService与bindeService的顺序没有关系,onStart在onBind()前还是后可能是受service 的onCreate()方法执行时间影响)
4、在Service stop前不论是在当前activity还是其他对象中继续调用startService-->bindeService-->unBindService这些方法对应的调service方法为onStart()->onServiceConnected()(在同一对象如果调过bindService后在调用unBindService前重复调bindService,则onServiceConnected()方法不会重复调用),不会再调用onBind()方法和onUnbind()方法。

5、在service的生命周期中onBind()方法和onUnbind()只会被调用一次即使在不同对象调了多次bindeService和unBindService。
6、如果在activity1中startService,在activity2中onBindServie,则在activity2调unBindService前在activity1中调stopService则不能立即调service的onDestroy,只有在activity2调unBindService后才会调service的onDestroy.如果只在activity1中startService和onBindServie则可在unBindService前调stopService使service的onDestroy被调用。

总结:startService和bindService及stopService和unBindService都可以多次调用,只是在Service关闭之前重复调用startService方法会重复调service的onStart(),重复调bindeService只会调onServiceConnected()而不会调onBind(),重复调unBindService是不会调onUnbind()方法的。
      stopService只有在所有调过bindServie的对象(调stopService的对象除外,可不用unBindeService)中都调了unBindService以后调才能使service的onDestroy被调用。
      onServiceDisconnected方法在意外连接断开或者系统资源不够的时候调用,或者service stop后,则之前调了几次unBindService则调几次onServiceDisconnected方法

 

以上过程全部在2.3中测试得到的结果

抱歉!评论已关闭.