用于在背景上录制的Android服务

时间:2013-11-10 21:53:59

标签: android service

我需要在android上实现录制服务。我一直在投入大量时间阅读有关服务,在android上做背景工作但我仍然没有想到它。这就是我到目前为止所做的:

  1. 我首先实现了一个在onCreate
  2. 上创建和维护AudioRecord实例的服务
  3. 我将应用程序子类化,并从应用程序onCreate
  4. 启动服务
  5. 我在onResume上从MainActivity绑定到该服务,在onPause
  6. 上取消绑定
  7. 服务的onBind就像Android SDK示例中的LocalService样本一样工作,意味着我返回了包含服务实例的绑定器并为其设置了getter
  8. 服务API允许其客户端启动和暂停其维护的AudioRecord
  9. 现在我所说的是服务的onCreate在应用程序启动它时只会被调用一次,但令人惊讶的是,似乎有时当我绑定到该服务时服务重新启动(onCreate和onStartCommand是叫)!

    这种行为对我来说非常糟糕,因为当用户从MainActivity启动记录时 (使用服务实例API)然后按home然后再次返回我的应用程序,再次调用服务的onCreate并重新创建AudioRecorder!

    我错过了什么?

3 个答案:

答案 0 :(得分:0)

您根本不需要致电startService。必要时,bindService会创建Service。这两种方法适用于两种不同的用例。

对评论的回应:

您的帖子没有提供需要调用startService的用例。你问为什么onCreate被调用了两次。它被调用两次,因为它被创建了两次。也许您没有从START_STICKY返回onStartCommand,或者您可能正在代码中停止它。没有代码,所以这里没有人可能知道。但如果onCreate被调用两次,那么确保它需要创建两次。根据您的说明,这两个电话很可能与拨打startServicebindService的电话相对应。我的答案与所提供的信息一样正确,但感谢您的支持。

答案 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>