Khu*_*hah 37 java android android-service
我想要一个可以在后台运行的服务,直到我停止,即使启动它的组件被销毁并且还允许绑定到活动.怎么可能?
根据android绑定服务文档 - 有三种创建绑定服务的方法
我使用messenger创建了绑定服务(第二种方法).Activity在其onStart()方法中绑定到服务,并在其onStop()方法中取消绑定.双向消息传递(在活动和服务之间)正常工作.但问题是,当活动取消绑定服务时,服务就会被破坏.但我想要一个可以无限期运行的服务.
它可以作为Android 服务开发指南 - "尽管本文档通常分别讨论这两种类型的服务,但您的服务可以双向工作 - 它可以启动(无限期运行)并允许绑定.这只是一个问题,你是否实现一些回调方法:onStartCommand()允许组件启动它,onBind()允许绑定."
我还在服务中实现onStartCommand()方法并返回START_STICKY,但它永远不会被调用.查看dev指南中有界服务的生命周期回调,没有onStartCommand()回调方法.那么如何运行服务直到我们停止并允许绑定?
我在fedora 15 OS中使用eclipse平台.
任何帮助.....
Joe*_*l F 47
你只需要在startService()某个地方启动它.这将防止在没有更多绑定时自动停止它.
从服务文档中,重点是我的:
服务既可以启动,也可以绑定连接.在这种情况下,只要系统启动或者使用Context.BIND_AUTO_CREATE标志有一个或多个连接,系统就会保持服务运行 .
正如其他人所指出的,如果需要资源,它仍可能被Android杀死.您可以"优先处理"您的服务,并使其成为前台服务时不太可能被杀死.
我没有使用messenger服务的服务,但是我已经绑定了一个带有远程(AIDL)接口的远程服务.我的发现可能有所帮助.由于我的主要活动和服务目前已实现,因此我像使用代码一样绑定到服务
mServiceConnected = bindService(new Intent("com.mypackage.MyService.SERVICE"), this,
Context.BIND_AUTO_CREATE);
Run Code Online (Sandbox Code Playgroud)
我的活动实现了ServiceConnection
当我在活动结束时调用unbindService(this)时,就像你找到的那样,调用服务的onDestroy()方法.
但是,如果在bindService行之前,我还显式启动了服务
startService(new Intent("com.mypackage.MyService.SERVICE"));
Run Code Online (Sandbox Code Playgroud)
那么unBind不会导致服务的onDestroy()执行.仍然需要在活动的onDestroy/Stop中调用unbindService,否则会泄漏服务连接.
在我的情况下,大概该服务仍可供其他应用程序通过其远程接口绑定.
| 归档时间: |
|
| 查看次数: |
19013 次 |
| 最近记录: |