关于Service的一些疑惑。

S756975 2015-08-26 02:57:12
我需要一个Service长期运行在后台,我先在其中一个Activity 用startService()启动了这个服务。这个没问题

但是在另一Activity中 调用其中的方法,用了bindService()去调用,这个Activity退出但时候必须要用到unbindService()方法,此时问题就来了,用了unbindService()之后,这个服务随着这个Activity的推出也挂了,我另外还有一个Activity要使用这个服务,怎么办?
难道要在Activity的onDestory() 中再startService()一遍吗?各位大大有什么好的建议。。

还有就是,如果不用startService(),在其他Activity中用 bindService()会不会造成资源开销过大?
...全文
158 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
Arnold9009 2015-08-27
  • 打赏
  • 举报
回复
可以试试远程service
S756975 2015-08-27
  • 打赏
  • 举报
回复
感谢u014165119这位朋友陪我唠叨,我觉得我太贪心了,因为我把一个Socket的线程放到了Service中,想在每个Activity中都调用这个socket的output方法往服务器发送数据,这才导致了,如果不调用socket的output方法,只是监听服务器的回馈,StartService之后确实是一劳永逸的。如果不调用Service里Socket的output方法,那么只能在其他地方创建一个静态单例的socket往服务器发数据了。放着Service中的socket不能用,感觉好浪费。
S756975 2015-08-27
  • 打赏
  • 举报
回复
引用 11 楼 u014165119 的回复:
[quote=引用 8 楼 S756975 的回复:] [quote=引用 6 楼 u014165119 的回复:] 首先你要搞懂bindService是干什么的
bindService 就是要和Service通信啊,调用里面的方法什么的。具体看需求吧[/quote] startService是启动一个跟Application生命周期一样的Service(除非中途调用stop方法关闭),bindService是启动一个跟Activity生命周期绑定的Service,因此你在每个Activity中bindService的时候,都要在此Activity的onDestory方法中unbind。[/quote] 是的 ,当你startService之后,某个Activity要使用这个服务里面的方法,就要bindService吧,然后利用ServcieConnection接口连接服务,当这个Activity和Service交互完推出之后,这个StartService的方式启动的Service是不是被销毁了?你不可能在Activity推出的时候不unbindServcie吧。 unbindServcie() 是调用Servcie的onDestory()方法啊。 我就在这里纠结了。。
S756975 2015-08-27
  • 打赏
  • 举报
回复
引用 7 楼 liyuanjinglyj 的回复:
配置文件设置service不被杀死。最牛逼的方法。。呵呵。
这是一个方向,我研究研究
StoneHui_ 2015-08-27
  • 打赏
  • 举报
回复
引用 8 楼 S756975 的回复:
[quote=引用 6 楼 u014165119 的回复:] 首先你要搞懂bindService是干什么的
bindService 就是要和Service通信啊,调用里面的方法什么的。具体看需求吧[/quote] startService是启动一个跟Application生命周期一样的Service(除非中途调用stop方法关闭),bindService是启动一个跟Activity生命周期绑定的Service,因此你在每个Activity中bindService的时候,都要在此Activity的onDestory方法中unbind。
S756975 2015-08-27
  • 打赏
  • 举报
回复
引用 3 楼 mengqidluffy 的回复:
用startService启动的service和activity是没关系。但是这个service可以和不同的acrivity通信,这足可满足楼主的开发需求。
这个我懂,我表达的是 :假设有三个Activity X Y Z 。在X startService之后 ,在By中绑定了这个Service,B退出的时候解除了绑定,那么这个service就跟着B一起销毁了。。 当我从B跳转到C 的时候 ,因为C需要使用Service服务,所以C也要bindService。 因为之前B -> C 的时候销毁了一次Service 。( unbindService 会调用 Service中的onDestory() ) 那么我想问 : 当进入C ,bindService的时候 ,这个Service又被创建了一次 。 当C和Service 交互完之后,C退出, Service又挂了一次。 我的应用还有其他的Activity。而且会不断重复上述的过程。其中还有一些网络的求情,经常使用wifi, 这样是否会造成cpu的发热严重。
S756975 2015-08-27
  • 打赏
  • 举报
回复
引用 1 楼 mengqidluffy 的回复:
1.bindService启动的服务是要与Activity共存亡的。若想服务能被多个Activity使用,则应使用startActivity。2.第二个问题不明想问什么
第二个问题是:我不用startService的方式启动service ,而是在各个activity中按需要 bindService 。那么这种方式使用 Service 是否会造成提醒资源,例如cpu发热,内存消耗大等问题。
S756975 2015-08-27
  • 打赏
  • 举报
回复
引用 6 楼 u014165119 的回复:
首先你要搞懂bindService是干什么的
bindService 就是要和Service通信啊,调用里面的方法什么的。具体看需求吧
李元静 2015-08-26
  • 打赏
  • 举报
回复
配置文件设置service不被杀死。最牛逼的方法。。呵呵。
StoneHui_ 2015-08-26
  • 打赏
  • 举报
回复
首先你要搞懂bindService是干什么的
zxb3121999 2015-08-26
  • 打赏
  • 举报
回复
startService启动的service可以调用stopService来停止服务.bindService启动的服务,要等所有bind他的activity都unbind了过后,才会销毁的,不然是不会销毁的
qq_30863895 2015-08-26
  • 打赏
  • 举报
回复
感觉楼上说的startService方法都不靠谱。 单纯的通过Activity的startService启动的服务也不能做到长期在后台运行,在内存消耗后,还是会被系统杀掉回收。 做到系统级别的服务,才比较靠谱。
  • 打赏
  • 举报
回复
用startService启动的service和activity是没关系。但是这个service可以和不同的acrivity通信,这足可满足楼主的开发需求。
summersrest 2015-08-26
  • 打赏
  • 举报
回复
你用context.startservice()方法启动service,service和activity是没有关系的。我们打个比方,假如你的这个service实在broadcastreceiver中启动的呢?不就和acitivity没有关系了么。
  • 打赏
  • 举报
回复
1.bindService启动的服务是要与Activity共存亡的。若想服务能被多个Activity使用,则应使用startActivity。2.第二个问题不明想问什么

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧