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

问题描述

在我的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的了解不多。

解决方法

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

,
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
    }
}

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...