使用多线程创建50ms java android的最小延迟

时间:2017-12-19 18:14:23

标签: java android

如何强制线程在不同的核心多线程上运行? 我在java android上有实时音频和记录代码。 我有一个线程用于记录和其他线程的播放。 我的目标是延迟播放输入。我需要延迟~50ms。我使用nexus 4/5

3 个答案:

答案 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());
    }
}