我正在编写一个涉及一个AudioTrack和一个AudioRecord的Android应用程序。它们在两个不同的线程中运行,即使应用程序在后台运行,它们也需要继续运行,并且在内存/CPU 不足时不会被杀死。我搜索了这个,我知道我可能会使用 AsyncTask(就像在音乐流媒体应用程序中一样(。但是,我不确定该怎么做,因为首先创建了运行 AudioTrack 的线程(一旦按下主活动上的某个按钮(,然后该线程将创建另一个运行 AudioRecord 的线程(通过创建 Runnable(。
我搜索了这个,我知道我可能会使用 AsyncTask(就像在音乐流媒体应用程序中一样(
不。你的问题不是线程,而是过程。
它们都需要继续运行,并且在内存/CPU 不足时不会被杀死,即使应用程序在后台运行
严格地说,这是不可能的。您将得到的最接近的是使用一个Service
,而又使用startForeground()
来指示它具有前台优先级。这将最大限度地减少Android由于内存不足而终止您的进程的可能性,但不会消除它。
另外,请注意,您需要打开 CPU 电源才能执行音频任务。反过来,这将需要一个WakeLock
.这将严重打击用户的电池,以至于您应该建议用户将设备放在充电器上。这在未来尤其重要,即将推出的"M"Android版本的"打瞌睡模式"将阻止您使用WakeLocks
如果设备处于空闲状态,不动且不使用充电器。