2014-09-29 6 views
7

Ich bekomme einen häufigen Absturz mit dem Protokoll unten. Es bezieht sich nicht auf meinen Anwendungscode, aber ich vermute, dass es etwas damit zu tun hat, dass GoogleApiClient sich verbindet/trennt. Hat jemand etwas Ähnliches? Ich habe hier nichts gefunden.DeadObjectException mit com.google.android.gms

java.lang.IllegalStateException: android.os.DeadObjectException 
    at com.google.android.gms.internal.ao.removeAllListeners(Unknown Source) 
    at com.google.android.gms.internal.ap.disconnect(Unknown Source) 
    at com.google.android.gms.common.api.b.n(Unknown Source) 
    at com.google.android.gms.common.api.b.a(Unknown Source) 
    at com.google.android.gms.common.api.b$2.onConnectionSuspended(Unknown Source) 
    at com.google.android.gms.internal.r.y(Unknown Source) 
    at com.google.android.gms.internal.q$a.handleMessage(Unknown Source) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:136) 
    at android.app.ActivityThread.main(ActivityThread.java:5102) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:515) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 
    at dalvik.system.NativeStart.main(Native Method) 
Caused by: android.os.DeadObjectException 
    at android.os.BinderProxy.transact(Native Method) 
    at com.google.android.gms.internal.an$a$a.a(Unknown Source) 
    ... 15 more 

Möglicherweise wo es passiert. Ich fügte hinzu,

mGApiClientMgr.addTask(mGApiClientMgr.new GoogleApiClientTask() { 
      @Override 
      public void run() { 
       Log.d(LOG_TAG, "Refreshing data set."); 
       Location location; 
       try { 
        location = LocationServices.FusedLocationApi.getLastLocation(getGoogleApiClient()); 
        onLocationChanged(location); 
       } 
       catch(IllegalStateException ex) { 
        // TODO 
       } 
      } 
     }); 
die Ausnahme einen try/catch zu fangen

wo addTask tut:

private final LinkedBlockingQueue<GoogleApiClientTask> mTaskQueue = new LinkedBlockingQueue 
     <GoogleApiClientTask>(); 

    mTaskQueue.offer(task); 
+0

können Sie Code-Snippet Ihrer Gms-Listener – ashoke

+0

Überprüfen Sie die Bearbeitung. – ono

+0

Dies ist das nächste, was ich gefunden habe http://StackOverflow.com/questions/24288685/deadobjectexception-in-gmslocationclient-android – ono

Antwort

5

Dies scheint Handler und Message-Passing im Zusammenhang ... Basierend auf folgenden Ausschnitt aus Ihrem Stack-Trace, gms ist ein DeadObjectException beim Versuch zu process a message auf dem Looper zu sehen. Obwohl der Stack-Trace gms anzeigt, könnte er durch Ihren Code ausgelöst worden sein.

at com.google.android.gms.internal.q$a.handleMessage(Unknown Source) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:136) 

Diese Ausnahme gesehen, wenn der message seinen Versuch, den Zugang zu einem Prozess gehören, die seit verlassen/getötet hat. Machen Sie eine Code-Suche für alle handler sendMessage* message dispatch calls, durch Ihren Code. Auch dies kann nicht alle Instanzen abfangen, da einige gms Aufrufe zu handler Nachrichtenversendungen führen können.

Überprüfen Sie auch, ob einer Ihrer Hintergrunddienste oder Aktivitäten, die handler Nachrichten zugewiesen haben, beendet werden. Android könnte sie zerstören depending on life cycle states, try overriding onDestroy.

In all Ihren Aktivitäten/Diensten, wo Sie Anrufe an gms API senden, überprüfen Sie die Objekte, die Sie erstellen und an übergeben; Wenn sie sterben, sind diese Objekte nicht mehr gültig.

+0

Danke für diese Info. Angenommen, die 'sendMessage' verursacht es, kann ich jeden von ihnen mit einem try-catch umwickeln, um die IllegalStateException abzufangen? – ono

+0

das wird nicht helfen, da 'sendMessage' wird gerade das Objekt an die Nachrichtenwarteschlange übergeben und zurückgeben. Die Ausnahme tritt zu einem viel späteren Zeitpunkt auf, wenn 'gms' das Objekt aus der Nachrichtenwarteschlange zieht. Währenddessen kann der Absender durch den Android-Lebenszyklus beendet oder getötet worden sein. Stellen Sie sicher, dass Sie das Objekt auf einem höheren Bereich zuweisen oder sehen, ob Sie es behalten können. – ashoke

+0

Eine mögliche Lösung besteht darin, festzustellen, welche Aktivität zerstört wurde, die mit dem Objekt zusammenhängt, das zwischen der Aktivität und dem Service über einen Handler übergeben wird. Oder identifizieren Sie den Dienst, der sie verursacht, und stoppen Sie den Dienst, wenn die Aktivität zerstört wird. Ist das der Weg dahin? – ono

Verwandte Themen