当应用程序处于后台时,java 安卓线程一直处于滞后状态
我正在开发一个WebRTC流媒体应用程序。其思想是从麦克风捕获信号,进行一些实时C/C++处理(JNI),并将处理后的信号传输到服务器。当应用程序位于前台时,该过程会按预期工作。然而,当应用程序进入后台或我锁定手机时,它开始滞后
我已经确定了流程的优先级。线程\u优先级\u紧急\u音频,但仍然滞后。对于我如何解决滞后问题,非常感谢您的帮助
private class AudioRecordThread extends Thread {
private volatile boolean keepAlive = true;
public AudioRecordThread(String name) {
super(name);
}
@Override
public void run() {
Process.setThreadPriority(Process.THREAD_PRIORITY_URGENT_AUDIO);
Logging.d(TAG, "AudioRecordThread" + WebRtcAudioUtils.getThreadInfo());
assertTrue(audioRecord.getRecordingState() == AudioRecord.RECORDSTATE_RECORDING);
// Audio recording has started and the client is informed about it.
doAudioRecordStateCallback(AUDIO_RECORD_START);
// do some C/C++ processing
long st_time = System.currentTimeMillis();
res = org.webrtc.audio.AudioEngine.processBuffer(100*num_buffers, containerBufferShort);
Log.i("process_time", String.valueOf(System.currentTimeMillis()-st_time));
nativeDataIsRecorded(nativeAudioRecord, bytesRead);
}
}
Update1:我注意到,当应用程序在后台时,处理时间(C/C++代码处理音频缓冲区的时间)增加了一倍。我不明白这种行为
Update2:这种行为不会发生在Android Emulator上,但会发生在我的实际Android设备上(OnePlus Nord N200)
更新3:正如@emandt所建议的,我分析了前台和后台模式下的CPU使用情况。CPU利用率保持不变,而功耗明显下降。这可能表明,当应用程序位于后台时,CPU时钟速度受到限制
共 (0) 个答案