如何可能服务无限期运行,并允许绑定在Android?

我想要一个可以在后台运行的服务,直到我停止,即使启动它的组件被销毁,也允许绑定到活动。 怎么可能?

根据android绑定的服务文档 – 创build绑定服务有三种方法

  1. 扩展Binder类。
  2. 使用Messenger。
  3. 使用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.onStartCommandcallback。 由于@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如何无限期运行,并允许绑定多个活动

https://github.com/shanrais/BothService

如果您在Android应用程序抽屉中添加"Ongoing Notification" ,那么您的应用程序和服务将不会被终止。

查看http://developer.android.com/guide/topics/ui/notifiers/notifications.html