gpt4 book ai didi

java - Android Firebase : How is OnCompleteListener working asynchronously if it called on main application thread?

转载 作者:行者123 更新时间:2023-12-02 09:57:56 28 4
gpt4 key购买 nike

我编写了一段代码来使用 Firebase Auth 创建新帐户:

public static int signUp(String email, String password) {
mAuth.createUserWithEmailAndPassword(email, password)
.addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
Log.i("accountMessage", "User has registered successfully!");
} else {
try {
throw task.getException();
} catch (FirebaseAuthUserCollisionException e) {
Log.i("accountMessage", "User is registered already!");
} catch (Exception e) {
e.printStackTrace();
}
}
}
});

Log.i("accountMessage", "I want that this message works lastest!");
}

我可以使用 LogCat 捕获 accountMessage。通常我必须首先看到 “用户已注册!” 消息,但是我无法先看到它: Android LogCat accountMessage我在Google APIs for Android上看到过OnCompleteListener 在主应用程序线程上调用,但我无法理解如果 OnCompleteListener 在主应用程序线程上调用(我知道主应用程序线程与 Android 上的 UI 线程相同),如何它是异步工​​作的吗?如果它在主应用程序线程上工作,它不应该同步工作吗?我的意思是,我们不应该先看到“用户已注册!”,然后再看到“我希望此消息最新有效!”消息吗?如果 OnCompleteListener 异步工作,是否有办法在 UI 线程上同步工作?

<小时/>

编辑2:

事实上,onComplete的异步操作导致下面代码中的res[0]从之前的signUp方法返回它在 onComplete 中被赋予值:

public static int signUp(String email, String password) {
final int[] res = new int[1];
mAuth.createUserWithEmailAndPassword(email, password)
.addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {

res[0] = 123;

// We can't use 'return 123;' in here...

}
}
});

// You can see that value of res[0] is "0", because not given "123" value.
// Must be: First, given "123" value to res[0], after then return res[0];
return res[0];
}

最佳答案

该工作发生在主线程之外,因此不会阻塞您的应用程序。然后,onComplete 回调会安排到主线程,以便您更新 UI,而无需自己进行上下文切换。

关于java - Android Firebase : How is OnCompleteListener working asynchronously if it called on main application thread?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55854800/

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