1

Ich habe angefangen, Speicherlecks auf meiner Android-App zu verfolgen, und dank der großartigen LeakCanary-Bibliothek habe ich festgestellt, dass einige meiner Aktivitäten, die eine GooglePlusButton beinhalten, einen Zusammenhang verlieren.Google PlusOneButton leckt einen Kontext

Leider habe ich keinen Workaround gefunden, um es zu vermeiden. Wie in dieser old bug report beschrieben, verbirgt die Initialisierungsmethode die Tatsache, dass sie einen Kontext benötigt. Außerdem benötigt es einen Aktivitätskontext; das Android-Studio Decompiler zeigt es (der Bug Reporter es auch sagen):

public void initialize(String var1, int var2) { 
    zzab.zza(this.getContext() instanceof Activity, "To use this method, the PlusOneButton must be placed in an Activity. Use initialize(String, OnPlusOneClickListener)."); 

Gibt es eine Abhilfe besser als vollständig von der + 1-Schaltfläche loswerden?

Hinweis: Ich verwende Google Play Services 9.6.0, aber dieses Problem trat auch in früheren Versionen auf.

Antwort

0

Wie es in der Fehlermeldung wird gesagt, wenn Sie mit G + 1-Taste nicht in einer Aktivität (zB in dem App-Leiste Menü) müssen Sie sie initialisieren nach der Methode initialize Aufruf (String, OnPlusOneClickListener).

Aktualisiert die + 1-Schaltfläche mit einer URL. Die meisten Apps rufen diese Methode jedes Mal auf, wenn die Schaltfläche aktiviert ist (z. B. in der Methode Activity onResume). Um diese Methode zu verwenden, muss der PlusOneButton in einer Aktivität platziert werden. Verwenden Sie initialize (String, OnPlusOneClickListener), andernfalls.

Mehr Infos hier: https://developers.google.com/android/reference/com/google/android/gms/plus/PlusOneButton

+0

Danke für deinen Kommentar, aber mein Problem ist die Verwendung der G + 1-Schaltfläche in einer Aktivität; was zu einem Kontextleck führt. –

0

Die bisherige Antwort weist mich in eine neue Richtung. Ich verwalte es schließlich, indem ich die G + 1-Schaltfläche dynamisch erzeuge und dem Konstruktor den Anwendungskontext gebe:

mPlusOneButton = new PlusOneButton(getApplicationContext()); 
parent.addView(mPlusOneButton); 
... 
mPlusOneButton.initialize(..., new PlusOneButton.OnPlusOneClickListener() { 
     @Override 
     public void onPlusOneClick(Intent intent) {...} 
     }); 
Verwandte Themen