Следующий код использует SettableFuture
для преобразования API прослушивателя Firebase в будущее:
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);
}
});
}
Чтобы получить идентификатор, который я просто использую:
getIdAsync(activity).get();
Работает нормально, но если я вызываю его из обработчика событий BroadcastReceiver
, он вешает интерфейс.
Он зависает, даже если я вызываю его из потока пользовательского интерфейса, используя runOnUiThread
метод Activity.