gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 08:43:44 25 4
gpt4 key购买 nike

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

我尝试在 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;
}
}

这会在 View 永远不可见/放置到 Window 上的情况下导致内存泄漏。

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

最佳答案

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

关于android - 如果 View 永远不可见,我应该在 View 生命周期的什么时候取消订阅?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30386337/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com