如果 View 永远不可见,我应该在 View 生命周期的什么时候取消订阅?

At what point in the View lifecycle should I unsubscribe if the View is never made visible?

我有一个视图可以使用 API 将一些文本转换为该文本的本地化版本。如果视图在布局中可见,则此方法有效,因为一旦视图被销毁,就会调用 onDetachedFromWindow()。但是,如果视图是不可见的并且永远不会附加到 Window onDetachedFromWindow() 永远不会被调用。

我尝试在 onAttachedToWindow() 中执行本地化,但这最终导致文本无法 displayed/cut 关闭。

public class LocalisedTextView extends TextView {

    @Override
    protected void onFinishInflate() {
        super.onFinishInflate();
        setLocalisedText(label);
    }

    @Override
    protected void onDetachedFromWindow() {
        super.onDetachedFromWindow();
        if (subscription != null && !subscription.isUnsubscribed()) {
            subscription.unsubscribe();
            subscription = null;
        }
    }

    public void setLocalisedText(String label) {
        if (subscription != null && !subscription.isUnsubscribed()) {
            subscription.unsubscribe();
            subscription = null;
        }

        subscription = localisationService.get(label)
                .observeOn(Scheduler.ui())
                .subscribe(this::setText;    
    }
}

如果视图从未 visible/put 到 Window 上,这会导致内存泄漏。

所以我想知道处理对可能永远不会附加到 window 的视图的订阅的最佳方法是什么?

像视图这样的图形元素不应执行任何不直接影响绘图的逻辑。它不应是本地化文本,而应将本地化文本传递给它。