如何可能服务无限期运行,并允许绑定在Android?
我想要一个可以在后台运行的服务,直到我停止,即使启动它的组件被销毁,也允许绑定到活动。 怎么可能?
根据android绑定的服务文档 – 创build绑定服务有三种方法
- 扩展Binder类。
- 使用Messenger。
- 使用AIDL。
我使用Messenger创build了一个绑定服务(第二种方法)。 Activity在其onStart()方法中绑定到服务,并在其onStop()方法中解除绑定。 双向信息(活动和服务之间)正常工作。 但问题是活动解绑时,服务被破坏。 但是我想要一个可以无限期运行的服务。
这是可能的作为安卓服务开发指南 – “虽然这个文档通常分别讨论这两种types的服务,您的服务可以双向工作,它可以启动(无限期运行),也允许绑定。实现一对夫妇callback方法:onStartCommand()允许组件启动它和onBind()允许绑定。
我还在服务中实现了onStartCommand()方法,并返回START_STICKY,但它永远不会被调用。 查看开发指南中有界服务的生命周期callback,没有onStartCommand()callback方法。 那么如何才能运行服务,直到我们停止,并允许绑定?
我在Fedora 15 OS中使用eclipse平台。
任何帮助…..
你只需要在startService()
某处启动它。 这将防止它在没有更多绑定时自动停止。
从服务文档 ,重点是我的:
服务既可以启动,也可以绑定连接。 在这种情况下,只要服务启动,或者与Context.BIND_AUTO_CREATE标志有一个或多个连接 ,系统就会保持服务运行。
正如其他人所指出的那样,如果需要资源,它仍然可以被Android杀死。 你可以“优先”你的服务,并使它不太可能被杀死,如果你把它作为一个前台服务 。
我没有使用messenger服务的服务,但是我已经绑定到远程服务(AIDL)接口。 我的发现可能有一些帮助。 由于我的主要活动和服务目前正在实施,所以我像使用代码一样绑定到服务
mServiceConnected = bindService(new Intent("com.mypackage.MyService.SERVICE"), this, Context.BIND_AUTO_CREATE);
我的活动实现ServiceConnection
当活动结束时,我调用unbindService(this) ,就像你发现的那样,调用了服务的onDestroy()方法。
但是,如果在bindService行之前,我也明确地启动服务
startService(new Intent("com.mypackage.MyService.SERVICE"));
那么unBind不会导致服务的onDestroy()执行。 仍然需要在activity的onDestroy / Stop中调用unbindService,否则会泄漏一个服务连接。
在我的情况下,大概服务仍然可以通过其远程接口绑定到其他应用程序。
只有在使用startService
方法启动服务时才会调用Service.onStartCommand
callback。 由于@NickT和@JoelF已经指出你需要调用startService()
除了bindService()
调用你的客户端代码(例如在onCreate)。
您可能还想看看这个(有点旧,但仍然有用)的文章:“ 服务的双重生活 ”,并尝试提供的示例程序作者。
为了执行服务和活动之间的沟通。 您也可以使用官方Android示例中提到的Binder
http://developer.android.com/reference/android/app/Service.html#LocalServiceSample
作为官方安卓文件build议http://developer.android.com/guide/components/services.html#StartingAService
尽pipe本文档通常分别讨论这两种服务types,但您的服务可以同时工作 – 可以启动(无限期运行)并允许绑定。 这只是一个你是否实现了一个callback方法的问题:onStartCommand()允许组件启动它,而onBind()允许绑定。
这个项目实现了这个服务( BothService )的混合,并显示了一个Service如何无限期运行,并允许绑定多个活动 。
如果您在Android应用程序抽屉中添加"Ongoing Notification"
,那么您的应用程序和服务将不会被终止。
查看http://developer.android.com/guide/topics/ui/notifiers/notifications.html