我需要在android上实现录制服务。我一直在投入大量时间阅读有关服务,在android上做背景工作但我仍然没有想到它。这就是我到目前为止所做的:
现在我所说的是服务的onCreate在应用程序启动它时只会被调用一次,但令人惊讶的是,似乎有时当我绑定到该服务时服务重新启动(onCreate和onStartCommand是叫)!
这种行为对我来说非常糟糕,因为当用户从MainActivity启动记录时 (使用服务实例API)然后按home然后再次返回我的应用程序,再次调用服务的onCreate并重新创建AudioRecorder!
我错过了什么?
答案 0 :(得分:0)
您根本不需要致电startService
。必要时,bindService
会创建Service
。这两种方法适用于两种不同的用例。
对评论的回应:
您的帖子没有提供需要调用startService
的用例。你问为什么onCreate
被调用了两次。它被调用两次,因为它被创建了两次。也许您没有从START_STICKY
返回onStartCommand
,或者您可能正在代码中停止它。没有代码,所以这里没有人可能知道。但如果onCreate
被调用两次,那么确保它需要创建两次。根据您的说明,这两个电话很可能与拨打startService
和bindService
的电话相对应。我的答案与所提供的信息一样正确,但感谢您的支持。
答案 1 :(得分:0)
正确答案是here。
关于Dave回答的说明,我确实需要调用startService,因为当应用程序在后台时,应该可以继续记录,但是如果我在某些活动上使用bindService,那就是onCreate将不得不取消绑定其onDestroy上的连接,这将使服务停止运行(如果此活动是唯一绑定它的活动。
我总是可以从应用程序onCreate绑定到服务,但是什么时候我会解除绑定?即使我只是在用户按下主要活动时解除绑定,但这可能会导致泄漏。
答案 2 :(得分:0)
如果您要创建Background Video Recorder之类的录音应用
然后,您需要使用IntentService而不是Service,因为IntentService在后台线程中运行。
<a-entity laser-controls="hand: left" raycaster="showLine: true; objects: .clickable;"></a-entity>
<a-entity laser-controls="hand: right" raycaster="showLine: true; objects: .clickable;"></a-entity>