我是线程新手,我在堆栈溢出中经历了很多帖子并为我的问题找到了很多解决方案,但我不确定哪一个最适合哪种情况。
首先,我的问题是我想更新一个JSON文件 当所有线程都在特定路径生成位图时完成 我可以得到所有这些图像并更新JSON文件。所以 简单的单词我想在所有线程完成后运行一些代码 执行和主要要求是我不希望我的主要被阻止。
我发现了什么
我很困惑哪一个是解决我问题的最佳方法。如果有的话 android专家在那里可以总结一下这两个 scenerio什么是Android中最好的。
答案 0 :(得分:0)
你可以拥有你的线程的计数器,在每个线程完成后检查已完成的数量,如果不是全部完成,则增加已完成线程的数量,然后完成的最后一个线程将运行该段代码。
答案 1 :(得分:0)
你可以这样做。
在你的主题中:
private Runnable runnableThread= new Runnable() {
@Override
public void run() {
try {
if (lastThreadDone){
handler.sendEmptyMessage("SUCCESS");
}
}
catch (Exception ex) {
throws ex;
}
}
};
lastThreadDone
是boolean,如果进程完成,它将变为true,这取决于你如何实现它。
然后在你的处理程序中:
@SuppressLint("HandlerLeak")
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
try {
switch (msg.what) {
case "SUCCESS": {
// your code here
break;
}
case "FAIL":
break;
default:
break;
}
}
catch (Exception ex) {
throw ex;
}
super.handleMessage(msg);
}
};
答案 2 :(得分:0)
我会使用completion service,然后轮询直到所有任务完成。完成后,json文件会更新。问题是您需要执行此异步操作,否则您可能会阻止ui。因此,我将使用完成服务封装工作intent service。如果您需要更新ui,则可以从意向服务发布local broadcasts。
此外,对你来说
等到所有线程完成时
等待并在完成所有操作后获得通知