如何在不暂停Android / Java当前运行线程的情况下暂停当前循环?

时间:2020-10-16 16:24:54

标签: java android multithreading mp4parser

在我的android应用程序中,在我的片段中,我有一个 while循环,例如

startMs=0, endMs=30000;
while(i<10){
    new Mp4Composer(inputPath, destPath)
                                .trim(startMs, endMs)
                                .listener(new Mp4Composer.Listener() {
                                   @Overide
                                     public void onCompleted(){

                                        }
                                   }
                                .start();
startMs= endMs;
endMs+=30000;
i++
}

这里新的Mp4Composer 是一个线程...此任务在循环的每次迭代中都执行。.没有完成上一个任务(任务仍处于处理状态)...循环跳了到下一次迭代。因此,现有任务不会产生任何输出...并且由于循环而跳至下一个任务。

因此,我想要的是 while循环,应等待完成新的Mp4Composer 每个任务。通过使用 public void onCompleted()方法...,我们可以确定何时为每个任务完成异步任务。

在这里,我不应该暂停当前正在运行的线程(循环运行时所在的类)。原因是当我在while循环中放置类线程,总UI和Android应用程序暂停时暂停。我对Thread的了解不多。

2 个答案:

答案 0 :(得分:1)

使用处理程序,而不是while循环

答案 1 :(得分:1)

Handler mHandler = new Handler();
int startMs=0, endMs=30000, i=0;
Runnable action = new Runnable(){
    @Override
    public void run() {
        new Mp4Composer(inputPath, destPath)
                .trim(startMs, endMs)
                .listener(new Mp4Composer.Listener() {
                    @Overide
                    public void onCompleted(){
                        goNext();
                    }
                }
                .start();
    }
};
void goNext(){
    if(i < 10) {
        startMs = endMs;
        endMs += 30000;
        i++;
        mHandler.postDelayed(action, 2000); //2 second
    }
}
相关问题