2016-03-20 6 views
2

Ich benutze Firebase für eine Schule Dashboard-Anwendung. Die Anwendung wird mit Android erstellt. Es meldet sich über Google Credentials bei Firebase an. Festplattenpersistenz ist in Firebase aktiviert. Es gibt keine anderen Dienste oder Verbindungen, die die App verwendet. Firebase-Version im Build ist 'com.firebase: firebase-client-android: 2.4.0+'Firebase hohen Hintergrund Datenverbrauch auf Android

Ich öffnete die App - es meldet sich an und bekommt die Daten - dann legte es im Hintergrund. Die Datennutzung sieht wie folgt aus -

Vordergrund Datennutzung bleibt konstant bei - 38.87kb

Hintergrund Datennutzung hält alle paar Minuten erhöht - 2.53kb, 2.94kb, 11.49kb, 11.9kb, 12.18kb, 12,59 kb, 13,90 kb, 67 kb, 92 kb. Es verbraucht jede Minute etwa 1,5 KB Daten.

Ich habe sichergestellt, dass alle Firebase-Listener in der Pause getrennt sind. Warum nimmt die Nutzung der Anwendungshintergrunddaten im Laufe der Zeit kontinuierlich zu?

Antwort

3

Der Firebase-Client hält eine Netzwerkverbindung zu seinen Servern offen. Im Rahmen der Aufrechterhaltung dieser Verbindung tauschen der Client und der Server gelegentlich Keep-Alive-Nachrichten aus. Diese werden wahrscheinlich etwas Speicher verwenden, der bei einer Speicherbereinigung (größtenteils) zurückgewonnen werden sollte.

Sie möchten möglicherweise auf die neueste Version des Firebase SDK für Android BTW aktualisieren. Es ist jetzt auf Version 2.5.2.

+1

Das Problem ist, die Nachrichten scheinen sehr häufig ausgetauscht werden, und so lange fortgesetzt, wie die App im Hintergrund ist, unabhängig zu Zeit verstrichen ist. Gibt es eine Möglichkeit, dies zu reduzieren, vielleicht über Config. Oder schließen Sie die Verbindung nach einer bestimmten Zeit der Inaktivität. Über einen Zeitraum von einem Monat ergibt dies die Datennutzung von vielen MBs aus der App im Hintergrund, während der Vordergrund viel weniger im gleichen Zeitraum ist - hier ist eine tatsächliche Datennutzung durch die App von Beta-Test- Tablet1 - Vordergrunddatennutzung 413 KB, Hintergrunddatennutzung 4,30 MB. – anar

+1

Problem ist nicht die Speichernutzung, sondern der Netzwerk- und Akkuverbrauch, da die Verbindung im Hintergrund offen ist. – anar

1

Ich habe gerade 2 Methoden auf Firebase-Klasse gefunden - goOffline() und goOnline(), die mir helfen können, die Hintergrunddatennutzung zu reduzieren. Ich werde sie in onPause und onResume für alle Aktivitäten in der App versuchen.

+0

Nur getestet. Ja! Es funktionierte. – anar

0

Was ich getan habe, die Datennutzung zu reduzieren, ist eine Dienstleistung zu schaffen, die einen Verweis gezählt Zustand, wenn Feuerbasis mantain benötigt wird, um online zu sein und verwendet GoOnline()/goOffline() nach diesem Zustand:

class OnlineTracker { 
    void onlineNeeded(); //Increase reference count 
    void releaseOnlineNeeded(); //Decrease reference count 
} 

und wenn Sie bestimmte Vorgänge tun müssen, um die Firebase requiere online tun Sie zu sein:

try { 
    OnlineTracker.onlineNeeded(); 
    ... 
    Firebase operations that need online status 
    ... 
} finally { 
    OnlineTracker.releaseOnline() 
} 

auf diese Weise, wenn OnlineTracker Referenzzähler hat> 0 ruft GoOnline(), und wenn es auf 0 zurückgibt es nennt goOffline();

Um zu viel Switching zu verhindern, können Sie auch verzögern, wenn Sie goOffline gehen und einige Zeit warten, um zu sehen, ob der benötigte Online-Status in sehr kurzer Zeit benötigt wird.

See this gist for complete real code

Verwandte Themen