【发布时间】:2025-12-04 16:45:02
【问题描述】:
我正在使用 Parse 库从 DB 中查询一些记录,这些记录将显示在带有自定义适配器的 ListView 中。我有一个包含记录的表,每条记录都应该从其他表中进行计数查询。
这是对检索到的每个对象进行计数查询的线程:
getVisualizations = new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < events.size(); i++) {
ParseQuery<ParseObject> query = ParseQuery.getQuery(ParseConstant.PT_VISUALIZ);
query.whereEqualTo(ParseConstant.PT_VISUALIZ_EVENTO, events.get(i));
events.get(i).setVisualizations(query.count());
}
}
});
events 是一个对象数组列表
这是main中的代码
ParseQuery<ParseObject> query = ParseQuery.getQuery(ParseConstant.PT_EVENT);
query.setLimit(30);
query.findInBackground(new FindCallback<ParseObject>() {
public void done(List<ParseObject> resultList, ParseException e) {
if (e == null) {
events = new ArrayList<Event>();
for (int i = 0; i < resultList.size(); i++) {
Event event = (Event) resultList.get(i);
events.add(event);
}
if (!getVisualizations.isAlive()) {
getVisualizations.start();
}
if (adapter != null) {
adapter.notifyDataSetChanged();
} else {
adapter = new AdapterEvent(getActivity(), R.layout.list_event, events, list);
AnimationAdapter animAdapter = new SwingBottomInAnimationAdapter(adapter);
animAdapter.setAbsListView(list);
list.setAdapter(animAdapter);
}
loadingBar.setVisibility(View.INVISIBLE);
} else {
Log.d("score", "Error: " + e.getMessage());
}
}
});
问题是线程启动后,我不知道如何阻塞主线程,直到另一个线程完成。 (对不起英语:/)
【问题讨论】:
-
我推荐你使用类 AsyncTask 来做线程处理。而且主线程不应该被阻塞,因为是UI线程。
标签: android multithreading wait main synchronized