2

Firebase databaseからリアルタイムデータを受け取るAndroidアプリを作った。私の主なアクティビティでは、ユーザは電子メールとパスワードでログインしなければならず、成功するとデータを受け取る新しいアクティビティが開きます。Androidアプリを離れるときFirebaseデータベース接続を閉じる

ユーザーが自分のアプリを離れると、Firebase接続が確立されているようです。それはバッテリーには良いことではありません。

アプリケーションを終了して再び開くために接続を管理する方法はありますか?私はonPause()onResume()を使う必要があると思います。私はgoOffline()のようなものを見つけましたが、新しいFirebaseではこの方法が見つかりませんでした。

答えて

2

はい、onPause()onStop()onDestroy()などのアクティビティライフサイクルメソッドを使用して、接続を閉じることができます。

また、FirebaseにはまだgoOffline()の方法があります(https://www.firebase.com/docs/android/api/#firebase_goOffline)。

+0

はい、それは "古い" firebaseのためだけだと思われます。私はクラスFirebaseApp(com.google.firebase)しか持っていません.goOffline() –

+1

同じ方法が最新のFirebase SDKにあります: –

+0

@DenisBanach、私はそれを疑っています。さもなければFirebaseはその変更を反映するために文書を再構築するでしょう。 – 0x23212f

0

goOffline()goOnLine()方法を使用する代わりに、ValueEventListenersChildEventListenerswhen they are no longer neededを除去することです。私の経験(SDK 3.Xのみ)は、約1分後にFirebaseが自動的に切断され、リスナーが登録されておらず、保留中の書き込みなど、接続する他の理由もないということです。

0

私は最近、Firebaseデータベースを自分のアプリケーションに追加しましたが、時々バッテリーの使用量が高くなっていることに気付きました。ラジオをアクティブにしたままアプリにリンクされているように見えます(ラジオは10時間で1時間30分、約5分)。

唯一の他のネットワーク要素であるアプリ内購入のブロードキャスト受信機を無効にしているため、これはFirebaseデータベースにリンクされていると思います。私はオープンリスナーを持っていません(私は単一値イベントを使用しています)が、トランザクションの一部は変更可能ですので、そのうちの1つが完了できず、定期的に再試行が可能です。データベースの永続性はオフです。私は現在、/再開を一時停止するには、次の単純な加算をテストしてい

は(回答:-)でいくつかのコードを取得するようになった):

@Override 
protected void onResume() 
{ 
    super.onResume(); 

    if (FirebaseDatabase.getInstance() != null) 
    { 
     FirebaseDatabase.getInstance().goOnline(); 
    } 
} 

@Override 
public void onPause() { 

    super.onPause(); 

    if(FirebaseDatabase.getInstance()!=null) 
    { 
     FirebaseDatabase.getInstance().goOffline(); 
    } 
} 

そしてこれまでのところ、とても良いです。 **主な変更点は、活動を切り替えることです。Firebaseを使用するすべてのアプリケーションでこれを使用する必要があります(データベースからユーザー名を読み込んでいるため、ログインができなくなりました)**

5/12/16 - 数週間のテストの後に更新されます。昨日の電池使用量が高くなった。私は主にLollipopを試していますが、ラジオが他のアプリに公開されているという苦情がたくさんあります。 Android Mで自分のアプリをテストしている他の人は何の問題も報告していないので、おそらくLollipopの問題です。私はテストを続けるつもりですが、今回は不必要なトランザクションを削除して、これが役立つかどうかを確認しようとしています。

+0

これに1つのアップデートがあります。以前は永続性を使用していたので、静的なデータベースへの参照を作成したことに気付きました。 –

+0

脂肪指... if(mFirebaseDatabase == null) { FirebaseDatabase.getInstance()。 setPersistenceEnabled(true); mFirebaseDatabase = FirebaseDatabase.getInstance(); } –

+0

参照が静的でない場合は、データベース接続が自動的に閉じられているのだろうかと思います。したがって、おそらくgoOffline()/ goOnline()は、静的参照を使用する場合にのみ必要です。決定的な答えが得られたら更新します... Stack Oveflowの使い方を学ぶ必要があります。 Apolgies –

関連する問題