Android에서 특정 코드의 실행을 어떻게 보장 할 수 있습니까? Java 보증 콜백 주문 실행
는 여기Init() {
ParseQuery<ParseObject> query = ParseQuery.getQuery("MyTable");
query.getInBackground("ObjectID", new GetCallback<ParseObject>() {
public void done(ParseObject object, ParseException e) {
// [ ... some code ... ] <----------.
} // |
}); // |
// I'd like this is executed after this -----'
}
그래서 나는이 시도 코드는, 구문 분석 API 쿼리가 완료된 후 다른 스레드에서 실행됩니다 비동기 콜백, 일을 가지고 있지만 작동하지 않았다, 차단하는 경우 세마포어를 획득하지 않은 스레드에 출시되기 때문에 세마포어
private final Semaphore available = new Semaphore(1, true);
Init() {
try {
available.acquire();
ParseQuery<ParseObject> query = ParseQuery.getQuery("MyTable");
query.getInBackground("ObjectID", new GetCallback<ParseObject>() {
public void done(ParseObject object, ParseException e) {
// [ ... code ... ]
available.release();
}
});
available.acquire(); // waits till release
available.release();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
가인가 두 번째 시간을 확보하려고? 이 솔루션을 수정하는 방법?
그러나 나는 또한 문제
private static volatile Boolean available = false;
Init() {
available = false;
ParseQuery<ParseObject> query = ParseQuery.getQuery("MyTable");
query.getInBackground("ObjectID", new GetCallback<ParseObject>() {
public void done(ParseObject object, ParseException e) {
// [ ... some code ... ]
available = true;
}
});
while (available == false);
}
해결이 더미 방법을 시도하지만 루프 내부 차단 작동하지 않았고, 콜백이 실행되지 않습니다. 이 루프에서 루프를 제거하면 콜백이 실행되므로 루프와 관련된 문제 여야합니다.
특정 순서를 원할 경우 비동기를 사용하는 이유는 무엇입니까? – EJP