android四大基础组件--Service生命周期详解
2016-11-04 11:34
711 查看
android四大基础组件--ServiceService生命周期详解
1、Service的生命周期:
I> 在非绑定Service情况下,只有oncreate(),onStartCommand(),onDestory()方法情况下:
操作方法对应生命周期一:
a、【执行startService(Intent)】
执行生命周期方法:oncreate()--->onStartCommand();
b、【执行stopService(Intent)】
执行生命周期方法:onDestory();
操作方法对应生命周期二:
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();
III>绑定service和非绑定service混合使用执行的生命周期
操作方法:
a、【执行startService】
执行生命周期方法:onCreate()-->onStartCommand();
b、【执行bindService】
执行生命周期方法:onBind()--->onServiceConnected();
c、【执行onUnbindService】
执行生命周期方法:onUnbind();
d、【执行bindService】
执行生命周期方法:onServiceConnected()-->onRebind();
e、【执行onUnbindService】
执行生命周期方法:onUnbind;
f、【执行stopService】
执行生命周期方法:onDestory()
调用Service如下:
执行的打印结果如下:
总结:
1、当service执行startService操作以后,执行bindService,在service被绑定以后没有解绑的情况下,去执行stopService,此时不会触发Service的onDestory方法,但是解除绑定以后,继续执行stopService将触发onDestory方法。
2、ServiceConnection类中,如果service意外的发生中断,则此类中的onServiceDisconnected方法将会被调用执行;正常的中断(如:执行unbindService方法),则此类中的onServiceDisconnected方法不会被调用。
3、如果一个Service使用两种模式开启(bindService和startService),则必须保证两个生命周期都结束,才能执行onDestory方法。例如:bindxx--》startxx--》stopxx 或者 startxx--》bindxx--》stopxx,以上两种情况均不会执行onDestory()方法。
4、service与activity使用bindService进行绑定,并不能将service 的生命周期与activity的生命周期绑定。在部分情况下,取消绑定的时候也仅仅是取消service与activity之间的关系,并不能停止该service。
5、service中并不能够执行耗时操作,因为service与所在的应用位于同一个进程,并且service也并不是一条新的线程,如果执行耗时操作,将会出现ANR(Application Not Responding)异常。
2、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添加到队列中。
3、Service和IntentServiceActivity的最主要区别IntentService里面能够执行耗时操作,而不会造成UI线程阻塞。
总结:
上述文章通过在android studio中的运行,完整的展现了Service常用生命周期方法的执行过程,通过了解以上的过程能够方便我们程序的开发,在适当的生命周期,执行对应的方法,这样有助于程序的优化、方便后期的维护和减少内存不必要的浪费,更有助于我们对android底层学习。同时也对Service和IntentService进行了比较,以及IntentService的执行原理。不足之处,请大家不惜赐教。
1、Service的生命周期:
I> 在非绑定Service情况下,只有oncreate(),onStartCommand(),onDestory()方法情况下:
操作方法对应生命周期一:
a、【执行startService(Intent)】
执行生命周期方法:oncreate()--->onStartCommand();
b、【执行stopService(Intent)】
执行生命周期方法:onDestory();
操作方法对应生命周期二:
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();
III>绑定service和非绑定service混合使用执行的生命周期
操作方法:
a、【执行startService】
执行生命周期方法:onCreate()-->onStartCommand();
b、【执行bindService】
执行生命周期方法:onBind()--->onServiceConnected();
c、【执行onUnbindService】
执行生命周期方法:onUnbind();
d、【执行bindService】
执行生命周期方法:onServiceConnected()-->onRebind();
e、【执行onUnbindService】
执行生命周期方法:onUnbind;
f、【执行stopService】
执行生命周期方法:onDestory()
调用Service如下:
执行的打印结果如下:
总结:
1、当service执行startService操作以后,执行bindService,在service被绑定以后没有解绑的情况下,去执行stopService,此时不会触发Service的onDestory方法,但是解除绑定以后,继续执行stopService将触发onDestory方法。
2、ServiceConnection类中,如果service意外的发生中断,则此类中的onServiceDisconnected方法将会被调用执行;正常的中断(如:执行unbindService方法),则此类中的onServiceDisconnected方法不会被调用。
3、如果一个Service使用两种模式开启(bindService和startService),则必须保证两个生命周期都结束,才能执行onDestory方法。例如:bindxx--》startxx--》stopxx 或者 startxx--》bindxx--》stopxx,以上两种情况均不会执行onDestory()方法。
4、service与activity使用bindService进行绑定,并不能将service 的生命周期与activity的生命周期绑定。在部分情况下,取消绑定的时候也仅仅是取消service与activity之间的关系,并不能停止该service。
5、service中并不能够执行耗时操作,因为service与所在的应用位于同一个进程,并且service也并不是一条新的线程,如果执行耗时操作,将会出现ANR(Application Not Responding)异常。
2、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添加到队列中。
3、Service和IntentServiceActivity的最主要区别IntentService里面能够执行耗时操作,而不会造成UI线程阻塞。
总结:
上述文章通过在android studio中的运行,完整的展现了Service常用生命周期方法的执行过程,通过了解以上的过程能够方便我们程序的开发,在适当的生命周期,执行对应的方法,这样有助于程序的优化、方便后期的维护和减少内存不必要的浪费,更有助于我们对android底层学习。同时也对Service和IntentService进行了比较,以及IntentService的执行原理。不足之处,请大家不惜赐教。
相关文章推荐
- Android四大组件——Service 生命周期详解
- Android 四大组件之(2)Service实现原理以及AIDL语言的使用详解
- 【Android基础】(2)四大核心组件之Service
- Android 四大组件之Service 的生命周期和使用
- Android中的四大组件之Service详解
- Android四大组件——Service详解
- android四大组件--android service详解
- Android基础知识之四大组件Activity(三)多个Activity交互的生命周期与设计思想
- 0909Android基础安卓四大组件之Service
- 【Android基础】-Service组件使用详解
- Android的四大组件之Activity生命周期详解
- Android开发四大组件---Service详解
- 【Android四大组件之Service】(二)Android中Service的使用详解和注意点(LocalService),及startService与bindService的区别
- Android四大基本组件-Service详解
- Android四大组件之---Service(服务)详解
- Android基础之四大基本组件介绍与生命周期
- Android基础之四大基本组件介绍与生命周期
- Android 四大组件之Service详解
- Android核心基础-8.Android四大组件之Activity-3.生命周期、横竖屏切换、启动模式、进程管理
- Android四大组件-Service并非详解