您的位置:首页 > 移动开发 > Android开发

[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

(正常)

 

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">目前,没有搜到更深的原因,更明了的逻辑,能解释以上现象。</span>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: