以下代码使用SettableFuture
将Firebase侦听器API转换为未来版本:
private SettableFuture<InstanceIdResult> getId(@NonNull Activity activity) {
future = SettableFuture.create();
FirebaseInstanceId
.getInstance()
.getInstanceId()
.addOnSuccessListener(activity, new OnSuccessListener<InstanceIdResult>() {
@Override
public void onSuccess(InstanceIdResult instanceIdResult) {
future.set(instanceIdResult)
}
})
.addOnFailureListener(activity, new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
future.setException(e);
}
});
}
要获取我仅使用的ID:
getIdAsync(activity).get();
它工作正常,但是如果我从BroadcastReceiver
事件处理程序内部调用它,则会挂起该接口。
即使我使用runOnUiThread
Activity方法从UI线程调用它,它也会挂起。