私は火災基地で作業しており、私は何か変わったことに気づいた。 私がアクティビティに登録したバリューイベントリスナの1つが、アクティビティを終了した後でも起動されます。 'onDataChanged 'メソッドで新しいアクティビティを開くコードを追加しました。そのため、別のアクティビティでも新しいアクティビティが開かれます。これはアプリで大きな問題を引き起こしています。 私はリスナーを削除する必要があることを知っていますが、リスナーは、アクティビティが終了した後に自動的に削除されることが予想されます。私はアクティビティのすべてのバリューイベントリスナーを削除することができるより簡単な方法はありますか?前もって感謝します。アクティビティが終了した後でもFirebaseの値イベントリスナが起動しますか?
1
A
答えて
3
メインアクティビティから離れるとリスナーを削除する必要があります。ただ応じremoveValueEventListener(hashMap);
呼び出したより
hashMap.put(yourRef, eventListener);
:
private HashMap<DatabaseReference, ValueEventListener> hashMap = new HashMap<>();
public static void removeValueEventListener(HashMap<DatabaseReference, ValueEventListener> hashMap) {
for (Map.Entry<DatabaseReference, ValueEventListener> entry : hashMap.entrySet()) {
DatabaseReference databaseReference = entry.getKey();
ValueEventListener valueEventListener = entry.getValue();
databaseReference.removeEventListener(valueEventListener);
}
}
あなたはリスタを削除するたびに、あなたのコード行を使用することができます、あなたはこのようなメソッドを作成することができることを行うためにアクティビティのライフサイクルまでこの行は、onPause()
またはonStop()
の方法で追加できます。このようにしての場合、一度にすべてのリスナーを削除できます。
希望します。
+2
お返事ありがとうございますが、私はこれについて既に知っていました。私は、同時にすべてのリスナーを削除する他の方法があるかどうかを知りたいですか?手動で行うのは長い時間がかかるためです。 –
+0
はい、実際にはあります。私の更新された答えを見てください。 –
関連する問題
- 1. メインアプリはストリートビューのアクティビティを起動した後で終了します
- 2. 起動後のメソッドの実行が終了しました
- 3. アクティビティを終了するTabHostを終了時に起動しました
- 4. アクティビティが終了するとプロセスが再起動されます
- 5. アプリケーションが終了したときに通知からアクティビティを起動中にアプリケーションが終了する
- 6. StartActivityForResult StartActivityForResultアクティビティが終了しました
- 7. 起動フォームが終了して終了できませんでしたvb
- 8. プロセスが終了した後にAndroidアプリケーションを再起動する
- 9. Youtube-DL.exeがコマンドラインを起動した後に終了する
- 10. EnterpriseLibraryアプリケーションの再起動後にCacheManagerが終了しましたか?
- 11. システム起動サービス別の問題が終了した後
- 12. アプリが終了した後、アンドロイドでデバイスを再起動します
- 13. ファイルがFirebaseに見つかりません - 起動後すぐにアプリケーションが終了します
- 14. アンドロイド:アクティビティが終了した場合、再起動時に何が起こりますか?
- 15. アクティビティが終了するとUploadServiceBroadcastReceiverが終了します
- 16. すべてのスレッドを終了した後にアクティビティを終了します。
- 17. Androidアプリはアクティビティの終了後に強制終了します
- 18. Javaが起動しましたが、終了コード13で返されました
- 19. Firebase:アプリケーションが終了しても子イベントが聞こえます
- 20. xamarinのiosデバイスで起動した後でアプリケーションが終了する
- 21. アンドロイド - asynctaskが終了した後でのみ現在のアクティビティを終了します
- 22. Eclipseは(JVMが終了し、終了コード= 1。)起動しない
- 23. setSingleChoiceItemsの値がアクティビティの終了後に固まらない
- 24. ユーザーがnotitifcationをクリックした後の現在のアクティビティの終了
- 25. ブラウザを再起動してもセッションが終了する
- 26. javaが起動しましたが、終了コード= -8053306369を返しました
- 27. アクティビティが終了した後にインテントエクストラのデータを取得
- 28. EC2インスタンスが終了状態で起動されました
- 29. 動画の終了後にアクティビティを終了する
- 30. AuthorizationExecuteWithPrivilegesで起動した後にプロセスを終了する
Firebaseデータベースリスナーはコンテキストにバインドされていません。 Alexの答えのように、正しいアクティビティライフサイクルイベントでコード内で明示的に削除する必要があります。 –
これをコンテキストに付加する方法はありますか?私は手動で行うのではなく、それぞれのアクティビティに多くのリスナーがいるので、私はそれをしたくありません。 –
最新の回答をご覧ください。 –