有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

当应用程序处于后台时,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时钟速度受到限制

enter image description here


共 (0) 个答案