如何在不暂停 Android / Java 中的当前 运行 线程的情况下暂停当前循环?
How to pause the current loop without pausing current running thread in Android / Java?
在我的 android 应用程序中,在我的片段中,我有一个 while 循环 like
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++
}
这里new Mp4Composer是一个Thread...这个任务在循环的每次迭代中执行...没有完成前一个任务(任务仍处于处理状态)。 .. 循环跳转到下一个 iteration.so 现有任务不产生任何输出...并由于循环而跳转到下一个任务。
所以我想要的是 while loop 应该等待完成 new Mp4Composer each任务。通过使用 public void onCompleted() 方法...我们能够确定异步任务何时完成 each 任务。
这里我不应该暂停当前的 运行 线程(其中 class while 循环 运行)。原因是当我在 while 循环放置 class 线程时暂停,总共 UI,我的 android 应用程序被暂停。我对线程了解不多。
使用处理程序而不是 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
}
}
在我的 android 应用程序中,在我的片段中,我有一个 while 循环 like
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++
}
这里new Mp4Composer是一个Thread...这个任务在循环的每次迭代中执行...没有完成前一个任务(任务仍处于处理状态)。 .. 循环跳转到下一个 iteration.so 现有任务不产生任何输出...并由于循环而跳转到下一个任务。
所以我想要的是 while loop 应该等待完成 new Mp4Composer each任务。通过使用 public void onCompleted() 方法...我们能够确定异步任务何时完成 each 任务。
这里我不应该暂停当前的 运行 线程(其中 class while 循环 运行)。原因是当我在 while 循环放置 class 线程时暂停,总共 UI,我的 android 应用程序被暂停。我对线程了解不多。
使用处理程序而不是 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
}
}