2016-01-29 45 views
0

我想知道Firebase是否使用WeakReference類來引用偵聽器實例。Firebase是否在Android上爲他們的聽衆使用`WeakReference`?

想象一下下面的場景:愚蠢的開發人員在他SillyActivityonCreate()中附加ValueEventListener,並忘記將其刪除。如果SillyActivity被殺死,聽衆參考是否會失效?否則它將保留在進程堆中,甚至繼續執行。

換句話說:作爲一個WeakReference,如果只在活動/片段的生命週期中添加一次,那麼對於偵聽器不會被刪除不會是一場災難。它不會在活動/片段的整個生命週期中泄漏。

另一個相關的獎金問題是,如果聽衆添加了addListenerForSingleValueEvent()會自動刪除。該文件聲稱一次觸發偵聽器,但不會將其刪除。我認爲它會自動移除 - 這將是實現一次性射擊的最簡單方法。

+0

WeakReferences通常不應該在Android中使用。 Dalvik將立即清除任何只有弱引用的對象。與JVM相比,它將使它們在需要資源之前一直存在,使其成爲可行的緩存候選者。 –

回答

1

我懷疑它,否則它不會與這樣的事情工作:

polls.addListenerForSingleValueEvent(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot snapshot) { 
    ... 
    } 
} 

因爲不會有任何非WeakReference s到聽者。

+0

這是有道理的。那麼這對於聽衆不會被刪除真的是一場災難。 – cybergen

+0

關於獎金問題的思考,如何實施呢?很顯然,當添加'addListenerForSingleValueEvent()'時,偵聽器也會自動移除。 – cybergen

+0

文檔在哪裏聲稱不刪除它?它可能只是調用所有的回調,然後清除它們的列表... – Buddy