setPersistenceEnabled (true) bloquea la aplicación

Estoy creando mi primera aplicación Firebase. Uno de sus requisitos es que se ejecute cuando la red no esté disponible. La guía de Firebase dice:

Habilitar la persistencia del disco permite que nuestra aplicación también mantenga todo su estado incluso después de reiniciar la aplicación. Podemos habilitar la persistencia del disco con solo una línea de código.FirebaseDatabase.getInstance (). SetPersistenceEnabled (true); Con la persistencia del disco habilitada, nuestros datos y escrituras sincronizados se mantendrán en el disco a través de los reinicios de la aplicación y nuestra aplicación debería funcionar sin problemas en situaciones fuera de línea.

Otro requisito es usar Google Sign In. Entonces en miMainActivity Compruebo si el usuario ha iniciado sesión, si no, inicio elSignInActivity. (LosSignInActivity es de los ejemplos de Firebase).SignInActivity funciona, el usuario inicia sesión yMainActivity se lanza por segunda vez. Ahora mi aplicación falla en la línea de códigoFirebaseDatabase.getInstance().setPersistenceEnabled(true); con el siguiente mensaje:

Las llamadas a setPersistenceEnabled () deben realizarse antes de cualquier otro uso de la instancia de FirebaseDatabase.

Ahora si reinicio mi aplicación, el Usuario ha iniciado sesión, elSignInActivity no se inicia, mi aplicación funciona bien.

¿Alguna sugerencia de cómo evito este bloqueo después de que el usuario inicie sesión?

Mientras publicaba esta pregunta, recibí una sugerencia para reubicarmeFirebaseDatabase.getInstance().setPersistenceEnabled(true); a mi "clase de aplicación". Obtengo exactamente el mismo resultado ...SignInActivity comienza, se completa y me cuelgosetPersistenceEnabled.

A continuación se muestra mi actividad principalonCreate:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Calls to setPersistenceEnabled() must be made before any other usage of FirebaseDatabase instance.
    // Crash here upon returning from SignInActivity.  
    FirebaseDatabase.getInstance().setPersistenceEnabled(true);
    mFirebaseDbReference = FirebaseDatabase.getInstance().getReference();

    // Initialize Firebase Auth
    mFirebaseAuth = FirebaseAuth.getInstance();
    mFirebaseUser = mFirebaseAuth.getCurrentUser();
    if (mFirebaseUser == null) {
        // Not signed in, launch the Sign In activity
        Timber.tag("MainActivity").i("onCreate(): User not signed in, launching SignInActivity");
        startActivity(new Intent(this, SignInActivity.class));
        finish();

    } else {
        mUsername = mFirebaseUser.getDisplayName();
        Timber.tag("MainActivity").i("onCreate(): User \"%s\" signed in.", mUsername);
        if (mFirebaseUser.getPhotoUrl() != null) {
            mPhotoUrl = mFirebaseUser.getPhotoUrl().toString();
        }
    } 

Respuestas a la pregunta(17)

Su respuesta a la pregunta