假设我有以下代码:
private void getResource(String mac, String resource) {
int threadID = android.os.Process.myTid();
Log.e( "", "Marker 1" );
Mds.builder().build(mContext).get(SCHEME_PREFIX + mac + resource, null, new MdsResponseListener() {
@Override
public void onSuccess(String data, MdsHeader header) {
Log.e( "", "Marker 2" );
int callbackTID = android.os.Process.myTid();
if( callbackTID == threadID) {
Log.e("", "Same Thread");
}
else{
Log.e("", "Different Thread");
}
}
});
Log.e( "", "Marker 3" );
}
似乎我在其中指定的回调是在对进行整体函数调用的同一new MdsResponseListener
线程中执行的,因为和是相同的。get(...)
threadID
callbackTID
但是,日志清楚地显示,在它之前"Marker 3"
打印,根据我的理解,它告诉我这毕竟是一个异步回调。怎么会这样?我对java(和android)很陌生,所以也许我在这里遗漏了一些重要的基础知识。 "Marker 2"
如何实现一种等待回调的方法?我已经尝试过,CoundDownLatch
它只是在方法中倒计时onSuccess
并在日志打印之前等待"Marker 3"
,但正如我所料,我被卡住了,因为显然回调在与等待的线程相同的线程中运行。