AutoClearedValue類記錄

這個類AutoClearedValue比較有意思,它用于保存一個引用,并監聽Fragment的狀態,當Fragment銷毀UI后將該引用置空。這種方式免去了每個Fragment里都要在相應生命周期方法里處理特定變量的麻煩:

/**
 * A value holder that automatically clears the reference if the Fragment's view is destroyed.
 * @param <T>
 */
public class AutoClearedValue<T> {
    private T value;
    public AutoClearedValue(Fragment fragment, T value) {
        FragmentManager fragmentManager = fragment.getFragmentManager();
        fragmentManager.registerFragmentLifecycleCallbacks(
                new FragmentManager.FragmentLifecycleCallbacks() {
                    @Override
                    public void onFragmentViewDestroyed(FragmentManager fm, Fragment f) {
                        AutoClearedValue.this.value = null;
                        fragmentManager.unregisterFragmentLifecycleCallbacks(this);
                    }
                },false);
        this.value = value;
    }

    public T get() {
        return value;
    }
}

是否也可以依照類似的思路,為Activity寫一個?

在mvvm中,activity一般只負責創建fragment等實例,以及頁面跳轉等,并不需要持有多少引用,特別是引入dagger2后現象更明顯。所以這樣做意義不大。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容