我们做几个实验:
1,启动service
后,按back键返回。
一开始我没在service
中用子线程来调用方法,结果导致点击屏幕没有响应,但是菜单按钮和会主界面的
按钮可以按,因为,service
还是运行在主线程中的,后面我用子线程调用方法,测试的结果是:
用startService()
启动之后,按back
键,activity
被destroy,但是service
继续在运行,也就是说,当
activity
被销毁后,主线程并没有被销毁,并且程序运行完后,service
也没有destroy。而用bindService()
启动之后,按back键,activity
被销毁,然后onUnbindService
,然后ServiceDestroy
,但是程序还是一直
运行,也就是说bindServic
e和activity
是绑定的,当activity
消亡时,这个service也消亡。同时这里得提一下,
当这个service
消亡时,是只运行service
中的onUnbind()
方法,不会去运行activity
中的onServiceDisconnected()
方法。
2,分别多次按startService
按钮和BoundService
按钮,看看情况
结果是startService
按钮是第一次创建service
后,后面每次按都不会再创建,但是都会执行onStartCommand()
方法,
而对于bindService而言,按一次之后再按不会有变化,但是如果将conn
这个变量在BoundService
按钮的
方法体中再次赋值(之前是在onCreate中赋值),那么结果就不同,当按下一次后再按,结果就会再次执行,再按,再执行,
当然如果你调用的方法的执行需要时间,比如打印1-100的数,那么两次结果会穿插输出,而当你按unBound按钮时,就会发现
当你按一次时,它不会调用service
中的onUnbind()方法,service
也不会被destroy,但是再按一次就会报错,内容大概是
service
没有registered(发生这种情况的原因是这里的conn会跟最后一个按BoundService按钮时候生成的conn一致。)。这与按一次BoundService按钮,再按一次unBoundService按钮结果不
同,这时按unBoundService的结果是会调用service
中的onUnbind()
方法,service
也会被destroy
。为什么多按几次BoundButton再按一次unBoundButton不会调用service中的onUnbind()方法,
service
也不会被destroy
呢?但是这个service
应该是被unBind的了的,不然的话第二次按的话为什么会出现这个service
没有registered的错误呢,那么如何被onunBind的呢?而后,我想到
将所产生的conn全部存储起来,然后分别当作参数传递给activity
中的unbindService(conn)
方法,
于是我将点击bindButton按钮产生的所有ServiceConnection
的对象全都存储到一个
ServiceConnnection
的数组中,然后在unBindButton中将数组的值分别赋值给conn,这样的话当你点击bindButton
产生多个ServiceConnection
对象后,点击unBindButton按钮就会依次解除绑定,当你解除最后一个service时,就会调用
onUnbind
和destroy
方法,也就是说,其实onUnbind
方法是等所有的service
解除绑定后才调用,所以之前只解除一个service
时并没有调用这个方法,也就没有destroy
,因为这个service
和activity
还是处在绑定的状态。
startService与BindService的区别
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- Android执行Service有两种方法,一种是startService,一种是bindService。下面让我...
- Android执行Service有两种方法,一种是startService,一种是bindService。下面让我...
- 转自Android四大基本组件介绍与生命周期Android四大基本组件分别是Activity,Service服务,...
- Service是Android四大组件中与Activity最相似的组件,他们都代表可执行的程序,Service与A...