如何强制线程在不同的核心多线程上运行? 我在java android上有实时音频和记录代码。 我有一个线程用于记录和其他线程的播放。 我的目标是延迟播放输入。我需要延迟~50ms。我使用nexus 4/5
答案 0 :(得分:2)
尝试这样的事情:
final ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
executorService.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
//run whatever task you're running
}
}, 0, 50, TimeUnit.MILLISECONDS);
以上代码将等待50毫秒后运行该线程。
答案 1 :(得分:0)
我认为,使用Handler你可以解决这个问题。将您的记录代码写在处理程序上方,并在处理程序内编写播放代码。
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
}
},50);
答案 2 :(得分:0)
如果需要重复,可以使用此解决方案。它包含一个postDelayed
的处理程序。
重要提示:您需要删除任何回调!
尝试这样的事情:
private boolean continueLoop = true;
private Handler myHandler = new Handler();
private void startAutoDownloadManager() {
try{
Log.d(TAG, "AutoDownloadManager - Started");
// here the delay (in this example it is effectively the interval) is 1 second
myHandler.postDelayed(mAutoDownloadManager, 50);
}
catch(Exception ex){
Log.e(TAG, ex.getMessage());
}
}
private Runnable mAutoDownloadManager = new Runnable() {
public void run() {
if(continueLoop){
// preform the scan
startWhatEverMethodYouWish();
//re-trigger the call to start the scan
startAutoDownloadManager();
{
}
};
// Make certain that you remove the callback when you leave the activity -- maybe in onPause()
private void stopAutoDownloadManager(){
try{
myHandler.removeCallbacks(mAutoDownloadManager);
}
catch(Exception ex){
Log.e(TAG, ex.getMessage());
}
}