2017-09-27 8 views
0

私のアプリケーションの各フラグメントには、独自のFirebaseリスナのセットがあります。アクティブなフラグメントが変更されるとこれらは不要になりますが、リスナーはバックグラウンドで継続します。それに加えて、これらの古いリスナーは、前のFragmentのView更新をトリガーし、アプリケーションをクラッシュさせる可能性があります。ですから、断片が変わったら、整頓してリスナーを掃除したいと思います。私はどのようにわかっていませんが、私は代替的な解決策を持っています。私はあなたの考えや提案について興味がありました。フラグメントの変更時にFirebaseリスナーを連続的に削除する

リスナー関数は、例えば、フラグメントonCreateに呼び出されます。

fuSetListener(); 

これらの関数は、検索して、グローバル変数にデータを保存します。私は、リスナーを削除すべきかどうかを確認するためにif文これを実行FirebaseリスナーのonDataChange

if(getActivity()==null){ 
    reference.removeEventListener(this); 
} else { 
    // Perform necessary onDataChange actions 
} 

そこで問題が発生し、getActivity()は断片のみが変更された場合にはnullを返すのですか?またはgetActivity()nullを戻して、フラグメントを変更せずに自分のフラグメントの目的を壊すことはありませんか?

私はこの方法を2,3回適用しましたが、まだ問題に陥っていませんが、先に進む前に確認したいと思いました。

答えて

0

フラグメントのlife-cycleに従ってリスナーを削除する必要があります。

onStartにリスナーを追加した場合は、それをonStopで削除する必要があります。 onResumeにリスナーを追加した場合は、それをで削除する必要があります。 onCreateにリスナーを追加した場合は、それをonDestroyで削除する必要があります。 しかし、必ずが呼び出されるとは限りません。

希望します。

関連する問題