[android]service中再启service
2015-09-01 06:55
387 查看
问:service中启service行不行?
结论预览:在startService中startService可以,在startService中bindService可以;
在bindService中startService可以,在bindService中bindService不可以(只会执行第二个服务的onCreate,而不会执行onBind)。
其他附加结论:
1,若在没有绑定的情况下,却执行unbindService(conn)会崩掉。已验证。
2,正常下onUnbind之后会执行onDestory关闭。
若同时startService和bindService开启,则stopService和unbindService共同执行之后才会onDestory关闭。已验证。
3,在service的onDestory()中可以startService(自己这个服务),也就是在关闭的时候重启自己,俗称杀不死。在“设置”中点击“停止”,杀不死,已验证。
以下是打印的日志。
-------------------------开启activity
08-31 23:29:15.162: E/liulu(13516):activity onCreate
08-31 23:29:15.299: E/liulu(13516):activity onStart
1. ==============start 1 + start 2 =============================================
--------------------------开启第一个服务,并在第一个服务中开启第二个服务
08-31 23:29:22.565: E/liulu(13516): 点击开启服务
08-31 23:29:22.582: E/liulu(13516):onCreate
08-31 23:29:22.583: E/liulu(13516):onStartCommand
08-31 23:29:22.591: E/liulu(13516): 顺道希望开启第二个服务 startService(two_intent):
08-31 23:29:22.593: E/liulu(13516):two:onCreate
08-31 23:29:22.594: E/liulu(13516):two:onStartCommand
(正常开启第二个service)
--------------------------关闭第一个服务,并关闭第二个服务
08-31 23:29:31.199: E/liulu(13516): 点击关闭服务
08-31 23:29:31.205: E/liulu(13516):onDestroy
08-31 23:29:31.211: E/liulu(13516): 顺道希望停止第二个服务 stopService(two_intent):
08-31 23:29:31.226: E/liulu(13516):two:onDestroy
(正常)
2. ============== bind1 + bind2 =============================================
--------------------------绑定第一个服务,并在第一个服务中绑定第二个服务
08-31 23:29:37.118: E/liulu(13516): 点击綁定服务
08-31 23:29:37.126: E/liulu(13516):onCreate
08-31 23:29:37.129: E/liulu(13516): onBind
08-31 23:29:37.136: E/liulu(13516): 顺道希望绑定第二个服务 bindService(two_intent, con2, BIND_AUTO_CREATE):
08-31 23:29:37.146: E/liulu(13516): two:onCreate
(注意:这里第二个服务并没有被绑定,只是onCreate)
--------------------------解除绑定第一个服务,并在解除绑定第二个服务
08-31 23:29:47.662: E/liulu(13516): 点击解绑定服务
08-31 23:29:47.666: E/liulu(13516):onUnbind
08-31 23:29:47.670: E/liulu(13516): 顺道希望解绑定第二个服务 unbindService(con2):
08-31 23:29:47.672: E/liulu(13516):onDestroy
08-31 23:29:47.675: E/liulu(13516): 顺道希望停止第二个服务 stopService(two_intent):
08-31 23:29:47.688: E/liulu(13516):two:onDestroy
(不正常,第二个服务没绑定)
3. ============== start 1 + bind2 =============================================
--------------------------开启第一个服务,并在第一个服务中绑定第二个服务
09-02 15:14:56.995: E/liulu(19866): 点击开启服务
09-02 15:14:57.007: E/liulu(19866):OneService: onCreate
09-02 15:14:57.009: E/liulu(19866):OneService: onStartCommand
09-02 15:14:57.009: E/liulu(19866): 顺带bind第二个服务
09-02 15:14:57.014: E/liulu(19866):TwoService: onCreate
09-02 15:14:57.015: E/liulu(19866):TwoService: onBind
(正常绑定第二个service)
--------------------------关闭第一个服务,并解绑定第二个服务
09-02 15:15:01.167: E/liulu(19866): 点击关闭服务
09-02 15:15:01.173: E/liulu(19866):OneService: onDestroy
09-02 15:15:01.188: E/liulu(19866):TwoService: onUnbind
09-02 15:15:01.190: E/liulu(19866):TwoService: onDestroy
(正常)
4. ============== bind1 + start 2 =============================================
-------------------------绑定第一个服务,并在第一个服务中开启第二个服务
09-02 15:15:13.665: E/liulu(19866): 点击绑定服务
09-02 15:15:13.673: E/liulu(19866):OneService: onCreate
09-02 15:15:13.680: E/liulu(19866):OneService: onBind
09-02 15:15:13.681: E/liulu(19866): 顺带start第二个服务
09-02 15:15:13.700: E/liulu(19866):TwoService: onCreate
09-02 15:15:13.703: E/liulu(19866):TwoService: onStartCommand
(正常开启第二个service)
--------------------------解绑定第一个服务,并关闭第二个服务
09-02 15:22:31.418: E/liulu(21166): 点击解除绑定服务
09-02 15:22:31.421: E/liulu(21166):OneService: onUnbind
09-02 15:22:31.422: E/liulu(21166): 顺带close第二个服务
09-02 15:22:31.427: E/liulu(21166):OneService: onDestroy
09-02 15:22:31.438: E/liulu(21166):TwoService: onDestroy
(正常)
结论预览:在startService中startService可以,在startService中bindService可以;
在bindService中startService可以,在bindService中bindService不可以(只会执行第二个服务的onCreate,而不会执行onBind)。
其他附加结论:
1,若在没有绑定的情况下,却执行unbindService(conn)会崩掉。已验证。
2,正常下onUnbind之后会执行onDestory关闭。
若同时startService和bindService开启,则stopService和unbindService共同执行之后才会onDestory关闭。已验证。
3,在service的onDestory()中可以startService(自己这个服务),也就是在关闭的时候重启自己,俗称杀不死。在“设置”中点击“停止”,杀不死,已验证。
以下是打印的日志。
-------------------------开启activity
08-31 23:29:15.162: E/liulu(13516):activity onCreate
08-31 23:29:15.299: E/liulu(13516):activity onStart
1. ==============start 1 + start 2 =============================================
--------------------------开启第一个服务,并在第一个服务中开启第二个服务
08-31 23:29:22.565: E/liulu(13516): 点击开启服务
08-31 23:29:22.582: E/liulu(13516):onCreate
08-31 23:29:22.583: E/liulu(13516):onStartCommand
08-31 23:29:22.591: E/liulu(13516): 顺道希望开启第二个服务 startService(two_intent):
08-31 23:29:22.593: E/liulu(13516):two:onCreate
08-31 23:29:22.594: E/liulu(13516):two:onStartCommand
(正常开启第二个service)
--------------------------关闭第一个服务,并关闭第二个服务
08-31 23:29:31.199: E/liulu(13516): 点击关闭服务
08-31 23:29:31.205: E/liulu(13516):onDestroy
08-31 23:29:31.211: E/liulu(13516): 顺道希望停止第二个服务 stopService(two_intent):
08-31 23:29:31.226: E/liulu(13516):two:onDestroy
(正常)
2. ============== bind1 + bind2 =============================================
--------------------------绑定第一个服务,并在第一个服务中绑定第二个服务
08-31 23:29:37.118: E/liulu(13516): 点击綁定服务
08-31 23:29:37.126: E/liulu(13516):onCreate
08-31 23:29:37.129: E/liulu(13516): onBind
08-31 23:29:37.136: E/liulu(13516): 顺道希望绑定第二个服务 bindService(two_intent, con2, BIND_AUTO_CREATE):
08-31 23:29:37.146: E/liulu(13516): two:onCreate
(注意:这里第二个服务并没有被绑定,只是onCreate)
--------------------------解除绑定第一个服务,并在解除绑定第二个服务
08-31 23:29:47.662: E/liulu(13516): 点击解绑定服务
08-31 23:29:47.666: E/liulu(13516):onUnbind
08-31 23:29:47.670: E/liulu(13516): 顺道希望解绑定第二个服务 unbindService(con2):
08-31 23:29:47.672: E/liulu(13516):onDestroy
08-31 23:29:47.675: E/liulu(13516): 顺道希望停止第二个服务 stopService(two_intent):
08-31 23:29:47.688: E/liulu(13516):two:onDestroy
(不正常,第二个服务没绑定)
3. ============== start 1 + bind2 =============================================
--------------------------开启第一个服务,并在第一个服务中绑定第二个服务
09-02 15:14:56.995: E/liulu(19866): 点击开启服务
09-02 15:14:57.007: E/liulu(19866):OneService: onCreate
09-02 15:14:57.009: E/liulu(19866):OneService: onStartCommand
09-02 15:14:57.009: E/liulu(19866): 顺带bind第二个服务
09-02 15:14:57.014: E/liulu(19866):TwoService: onCreate
09-02 15:14:57.015: E/liulu(19866):TwoService: onBind
(正常绑定第二个service)
--------------------------关闭第一个服务,并解绑定第二个服务
09-02 15:15:01.167: E/liulu(19866): 点击关闭服务
09-02 15:15:01.173: E/liulu(19866):OneService: onDestroy
09-02 15:15:01.188: E/liulu(19866):TwoService: onUnbind
09-02 15:15:01.190: E/liulu(19866):TwoService: onDestroy
(正常)
4. ============== bind1 + start 2 =============================================
-------------------------绑定第一个服务,并在第一个服务中开启第二个服务
09-02 15:15:13.665: E/liulu(19866): 点击绑定服务
09-02 15:15:13.673: E/liulu(19866):OneService: onCreate
09-02 15:15:13.680: E/liulu(19866):OneService: onBind
09-02 15:15:13.681: E/liulu(19866): 顺带start第二个服务
09-02 15:15:13.700: E/liulu(19866):TwoService: onCreate
09-02 15:15:13.703: E/liulu(19866):TwoService: onStartCommand
(正常开启第二个service)
--------------------------解绑定第一个服务,并关闭第二个服务
09-02 15:22:31.418: E/liulu(21166): 点击解除绑定服务
09-02 15:22:31.421: E/liulu(21166):OneService: onUnbind
09-02 15:22:31.422: E/liulu(21166): 顺带close第二个服务
09-02 15:22:31.427: E/liulu(21166):OneService: onDestroy
09-02 15:22:31.438: E/liulu(21166):TwoService: onDestroy
(正常)
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">目前,没有搜到更深的原因,更明了的逻辑,能解释以上现象。</span>
相关文章推荐
- android Matrix.setRotate 和 postRotate的区别
- Android自学笔记之Intent 页面跳转详解
- Android自学笔记之 Android五大布局之线性布局的功能、常用属性、用法
- Android自学笔记之Spinner下拉框的功能、使用
- Android ORM DB使用心得
- Android NDK开发(八)——应用监听自身卸载,弹出用户反馈调查
- Android系统缓存相关
- android studio下的NDK开发详解(一)
- Android简单自定义标题栏
- android SDK manager 无法获取更新版本列表
- Android Spinner
- Android中AsyncTask的依赖执行用法
- Android开发环境的建立
- Android Low Memory 测试工具 Eat Memory
- Android各种View的下拉刷新与加载更多
- android-wheel三级联动
- Android Api Demos登顶之路(五十四)Service LocalService Binding
- 如何获取到Android控件的高度
- Android 如何让EditText不自动获取焦点
- android:gravity和android:layout_Gravity的区别