我的应用程序同时录制视频和使用TextToSpeech->android.speech.tts.TextToSpeech.说()。
如果我在像4处理器这样的高设备上运行1.5 ghz,工作正常。但是如果我在两个进程中使用1.1GHz设备ui线程的速度非常慢,冻结时间为2-6秒。
我知道TextToSpeech中存在这个问题,因为如果我不使用它并录制视频,ui线程在低设备上工作非常流畅。如果我使用TextToSpeech +记录视频用户界面线程不工作,而且声音冻结1-2 seg。
有什么方法可以提高TextToSpeech.speak()的性能吗?
发布于 2015-12-17 21:34:09
你同时用文字进行语音和录像记录?你很惊讶它进展缓慢吗?这两者都占用了大量的CPU资源。有些东西只需要处理能力。尽量不要同时使用它们,你会得到更好的结果。
如果您需要同时使用它们--首先尝试使用synthesizeToFile将声音剪辑写入文件,然后在录制时播放声音剪辑。这样你就不会在录音的同时产生音素了。
发布于 2015-12-17 21:49:56
当你说“处理器”时,你指的是“核心”吗?看起来,您正在执行的活动应该运行在3个不同的线程上。
主线程应该始终是免费的。尽量别让它陷进去..。永远不会!
扩展AsyncTask类。AsyncTask将允许您在不阻塞主线程的情况下做一些需要很长时间的事情。
因为这都是在虚拟机上运行的(准确地说,是Dalvik),所以我们必须假设线程也是虚拟的。这意味着,如果在两个核心上运行3个线程,虚拟机将决定哪些线程获得处理器周期,有时这意味着共享核心。
我想说的是,如果您只计划一次做两件重物,对于一个低端设备,您可以使用视频的主线程和TextToSpeech
的第二个线程来实现这一点。这并不理想,因为它可能阻塞主线程。但是由于视频是两者中最流畅的,所以它将是在主UI线程上运行的首选选择。
理想情况下,您需要至少三个线程,让主UI线程基本不受阻塞。您可以轮询两个线程的结果以检测完成情况。
如果您碰巧有4个内核,那么创建三个线程可能比可用的内核具有更多的分布式性能。
一些让你开始工作的文档:Android多线程-一篇高通文章,和安卓: AsyncTask
https://stackoverflow.com/questions/34344584
复制相似问题