gpt4 book ai didi

java - 等待同步回调?

转载 作者:行者123 更新时间:2023-12-02 11:03:56 24 4
gpt4 key购买 nike

假设我有以下代码:

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(...)< 进行整体函数调用的同一线程中执行的,因为 threadIDcallbackTID 相同。

但是,日志清楚地表明,“Marker 3” 是在 “Marker 2” 之前打印的,据我了解,这表明我认为这毕竟是一个异步回调。怎么会这样?我对 java(和 android)还很陌生,所以也许我在这里缺少一些重要的基础知识。

如何实现一种等待回调的方法?我已经使用 CoundDownLatch 进行了尝试,它只是在 onSuccess 方法中进行倒计时,并在 “Marker 3” 日志打印之前等待,但正如我所言正如预期的那样,我被卡住了,因为显然回调与等待的线程在同一个线程中运行。

最佳答案

您应该阅读有关异步编程及其工作原理的内容。

示例 1:

       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" );
doSomething() // Your method call when response is ready

});

private void doSomething() {
Log.e( "", "Marker 3" );
}

}

示例 2(RxJava)

Obserable.create( source -> 
Mds.builder().build(mContext).get(SCHEME_PREFIX + mac + resource, null, new MdsResponseListener() {
@Override
public void onSuccess(String data, MdsHeader header) {
source.onNext(data)
source.onComplete()
});
)

然后订阅这个observable,你可以操作subscribeOn/observeOn。

NOTE: This is only pseudo code and shows how it can be done.

关于java - 等待同步回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51125055/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com