【问题标题】:Making two threads to continue running in background使两个线程继续在后台运行
【发布时间】:2015-06-02 17:16:26
【问题描述】:

我正在编写一个涉及一个 AudioTrack 和一个 AudioRecord 的 Android 应用程序。它们在两个不同的线程中运行,即使应用程序在后台运行,它们都需要在内存/CPU 低时继续运行而不被杀死。我对此进行了搜索,我知道我可能可以使用 AsyncTask(就像在音乐流应用程序中一样)。但是,我不确定该怎么做,因为首先创建了运行 AudioTrack 的线程(一旦按下主活动上的某个按钮),然后这个线程将创建另一个运行 AudioRecord 的线程(通过创建一个 Runnable) .

【问题讨论】:

标签: java android multithreading audio android-asynctask


【解决方案1】:

我对此进行了搜索,我知道我可能会使用 AsyncTask(就像在音乐流应用中一样)

没有。你的问题不是线程,而是过程。

即使应用程序在后台运行,它们都需要在内存/CPU不足时继续运行而不被杀死

严格来说,这是不可能的。您将获得的最接近的方法是使用Service,而startForeground() 又使用startForeground() 表示它具有前台优先级。这将最大限度地减少 Android 由于内存不足而终止您的进程的可能性,但不会消除它。

另外,请注意,您需要打开 CPU 电源才能执行音频任务。反过来,这将需要WakeLock。这将严重损害用户的电池,以至于您应该建议用户将设备保持在充电器上。这在未来尤为重要,即将推出的“M”Android 版本的“打盹模式”将阻止您使用 WakeLocks,如果设备处于空闲状态、不动且未使用充电器。

【讨论】:

  • 是的,我知道应用程序不可能在所有情况下都被杀死。我只想尽可能地靠近它。我知道我可以把它变成一个服务,但我不认为服务是用于流媒体音乐的,我的应用程序所做的就像流媒体音乐一样,除了有一个额外的 AudioRecord 来记录我的 AudrioTrack。此流式传输/录制将持续大约一个小时。
  • @dayofdays:“我不认为服务用于流媒体音乐”——它总是用于流媒体音乐。您可以通过找到使用 Android 设备的人来判断这一点,让他们安装您感兴趣的流媒体音乐客户端,然后在“设置”应用的“应用”部分中注意到这些应用正在运行的服务。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-13
  • 1970-01-01
  • 1970-01-01
  • 2021-01-01
  • 1970-01-01
  • 2020-08-11
相关资源
最近更新 更多