2017-12-01 1 views
-1

ich habe:Warum warten MyActivity GoogleApiClient Callbacks, bevor es zur nächsten Aktivität geht?

  GoogleApiClientUtility googleApiClientUtility = new GoogleApiClientUtility(
       app.getGoogleApiClient(), 
       new GoogleApiClient.ConnectionCallbacks() { 
        @Override 
        public void onConnected(@Nullable Bundle bundle) { 
         try { sleep(10000); } 
         catch (InterruptedException e) { e.printStackTrace(); } 
         Log.e("GoogleApiClient: %s", "onConnected"); 
         app.getGoogleApiClient().unregisterConnectionCallbacks(this); 
        } 
       } 
     ); 
     Log.e("GoogleApiClient: %s", "Connect"); 
     googleApiClientUtility.connect(); 

     Log.e("destination: %s", "main actvity"); 
     startActivity(new Intent(SplashActivity.this, MainActivity.class)); 
     this.finish(); 

mein Verständnis dieses Codes, wird es passieren und direkt an MainActivity Klasse gehen.

aber warum, wenn ich es kompilieren, ist es 10 Sekunden warten, bevor es in meinem Log-Katze

und noch seltsamer zur Aktivitätsklasse geht, ist es mein Protokoll wie folgt zeigen:

GoogleApiClient: Connect 
destination: main actvity <-- it should go to main activity here 
... wait 10 secs.... 
GoogleApiClient: onConnected; 

then after that it goes to main activity... 

jedermann kann erklären warum? und wie, wenn ich Benutzer zu einer anderen Aktivität gehen lassen möchte, ohne die onConnected Rückrufe zu warten?

+0

Entfernen Sie den Schlaf –

+0

Ich benutze den Schlaf, um Wartezeit zu simulieren, ist es wirklich deswegen? – AnD

+0

Sie haben explizit die Aktivität warten auf 10 Sekunden, ja –

Antwort

1

onConnected wird nicht in einer garantierten Reihenfolge aufgerufen, da es sich um einen Rückruf handelt. Es könnte seine Protokolle vor oder nach der Zielprotokollnachricht drucken.

Es wartet, weil Sie explizit die MainActivity Thread schlafen, die die Anwendung verursachen können mit ANR zum Absturz (Application reagiert nicht)

Wenn Sie für die Verbindung warten soll, das ist, wie Sie es tun

Ansonsten ist nicht klar, warum Sie die Zeitüberschreitung simulieren müssen.

Sie sollten unregisterConnectionCallbacks während der onStop Methode der Aktivität tatsächlich verwenden.

+0

Nein, ich möchte nicht auf die Verbindung warten, ich möchte es Hauptaktivität, während Callback noch fließen läuft auch – AnD

+0

Okay, dann nur den Schlaf aus dem Rückruf entfernen –

+0

Ich benutze Schlaf, um Wartezeit zu simulieren, so dass ich sehen kann, ob es zur nächsten Aktivität vor dem Rückruf getan. – AnD

Verwandte Themen