为什么我的Android应用程序连接了Android Studio profiler会更快?

为什么我的Android应用程序连接了Android Studio profiler会更快?,android,dji-sdk,android-profiler,Android,Dji Sdk,Android Profiler,我正在开发一个android应用程序,它使用DJI Mobile SDK将DJI无人机的视频流发送到ANT媒体服务器。 视频使用RTMP协议和SDK方法进行编码和发送。 将ANT RTMP用于WEBRTC时,由于延迟非常低,我注意到了一个问题: 一旦启动流媒体,延迟约为600毫秒 大约2-3秒后,延迟开始线性下降,每3-4分钟损失约1秒 我还使用DJI提供的MobileSDK示例进行了测试,其行为是相同的。 考虑到性能问题,我随后连接了Android Studio Profiler,我注意到

我正在开发一个android应用程序,它使用DJI Mobile SDK将DJI无人机的视频流发送到ANT媒体服务器。 视频使用RTMP协议和SDK方法进行编码和发送。 将ANT RTMP用于WEBRTC时,由于延迟非常低,我注意到了一个问题:

  • 一旦启动流媒体,延迟约为600毫秒
  • 大约2-3秒后,延迟开始线性下降,每3-4分钟损失约1秒
我还使用DJI提供的MobileSDK示例进行了测试,其行为是相同的。 考虑到性能问题,我随后连接了Android Studio Profiler,我注意到一个非常奇怪的行为:连接了Profiler,流媒体性能非常完美。4-500毫秒的持续潜伏期,即使在数小时后也没有任何损失。 如果我立即启动应用程序并附加探查器,或者将其附加到打开的应用程序,则没有区别,重要的是在启动流媒体之前附加探查器

分析环境和非分析环境之间有什么区别?在Android Profiler执行期间,是否在系统/应用程序上设置了一些参数(线程优先级、系统计时器分辨率、无设备优化…?)

编辑

这是设置rtmp URL并开始流式处理的代码段,不需要更多代码。所有的魔法都是由DJI Mobile SDK完成的

new Thread() {
        @Override
        public void run() {
            DJISDKManager.getInstance().getLiveStreamManager().setLiveUrl(rtmpUrl);
            int result = DJISDKManager.getInstance().getLiveStreamManager().startStream();
            DJISDKManager.getInstance().getLiveStreamManager().setStartTime();              
        }
}.start();

我不知道是什么让你的应用程序在附加了探查器的情况下运行得更快,但我可以确认你提到的东西(线程优先级等)都没有在探查器中实现。我可以列出连接探查器时导致性能开销的一系列因素(设备上的服务器、JVMTI回调等),它们只会降低应用程序的速度,而不是相反


如果不看你的应用程序,我想不出任何解释。如果您喜欢,可以查看Android Studio Profiler的版本。

我编辑了这个问题,添加了管理流媒体的代码片段。正如您所看到的,在java方面我能做的不多。供参考的是,整个Java类(来自DJIMobileSDK示例)看起来与分析器没有任何关系。我认为有一件事很有意思,那就是运行应用程序,像以前一样附加分析器,然后单击会话面板中的按钮停止评测,而不停止应用程序。现在观察你的应用程序,看看它是否会退化?