2

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

我尝试在其中执行本地化,onAttachedToWindow()但这最终导致文本无法显示/切断。

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;    
    }
}

在视图从不可见/放到窗口上的情况下,这会导致内存泄漏。

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

4

1 回答 1

4

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

于 2015-05-22T00:14:51.013 回答