bra*_*all 9 java multithreading android unit-testing
一个非常简洁的问题:我如何用简单的测试证明,该设置:
android.os.Process.setThreadPriority(int);
Run Code Online (Sandbox Code Playgroud)
实际上有效?
我发布这个问题的原因主要是通用的,因为我找不到一个可以复制的简单测试.
进一步阅读:
这对我和我的应用程序来说非常重要,因为它捕获音频,这必须是优先考虑的事情.音频数据也被写入文件以及分析其属性,这不太重要 - 因此我不要求这些任务"真正同时".
在我的音频线程中,我设置:
Process.setThreadPriority(Process.THREAD_PRIORITY_URGENT_AUDIO);
Run Code Online (Sandbox Code Playgroud)
我可以通过检查之前和之后简单地测试上面的'应用':
Process.getThreadPriority(Process.myTid());
Run Code Online (Sandbox Code Playgroud)
但是,我对测试的需求是由于文档,其中指出:
最重要的音频线程的标准优先级.应用程序通常无法更改为此优先级.
尽管日志输出显示优先级已更改为-19,但我在文档中的措辞引起的担忧是,系统在执行时可能不允许正常应用程序的值为-19,并且可能保留为仅限系统应用?
如果上述情况属实,我想知道如何简单地证明这个优先级值会发生什么 - 它是否默认为允许的最大值,还是可以完全忽略?
关于实际测试本身,我已经尝试了循环和暂停,但没有成功,我不相信我所做的尝试的结果.我也知道这种行为是依赖于操作系统的,所以也许我无法复制一个独立的Java测试,但我没有找到任何支持的例子?
希望有人能提供帮助.提前致谢.
编辑 - 除了最初的答案,我很欣赏这种行为可能不是我想要或期望的.我想要对此进行实际的物理测试,而不是对可能性的解释.
测试将由多个线程组成,这些线程以不同的优先级运行,并且它们完成的顺序打印到日志中,没有比这更复杂的了.我的尝试似乎过于复杂,因此我在这里寻求帮助.
继续 James Large 留下的地方,Android 中的线程优先级更多的是对操作系统任务调度程序的暗示,并且完全依赖于底层 Android 操作系统。IE 可能会尝试为更高优先级的线程提供更多资源,但不保证这一点。
当您更改优先级时,您是否在真实设备上进行测试?虽然您不能保证您设置的任何优先级在资源分配方面都会受到尊重,但如果日志输出显示优先级发生变化,我不知道您应该有任何理由不相信它。