私はこの現実世界のシナリオを持っています。
ReaderConfig オブジェクトがあります。これは、ReaderTheme、ReaderFont、ReaderFontSize のダム タプルです。その変更により、readerConfigObservable がトリガーされ、再描画が行われます。
したがって、ソリューションソファは
combineLatest(themeObservable, fontObservable, fontSizeObservable,
(theme, font, fontSize) -> new ReaderConfig(theme, font, fontSize))
ただし、これは android であるため、ReaderTheme は android R.theme を設定します。それらを有効にするには、アクティビティを再起動する必要があります。だから私は自分自身でthemeObservableを公開する必要があります
themeObservable.subscribe(__ -> activity.recreate())
アクティビティを再起動するため、combineLatest をトリガーする必要はありません。これにより、再描画がトリガーされ、リソースが割り当てられますが、再起動のために 1 秒後に破棄されるだけです。
そのため、fontObservable と fontSizeObservable の変更のみが CombineLatest をトリガーする必要がありますが、ReaderConfig オブジェクトを構築するには、最新の themeObservable 値が必要です。
私の回避策はこれです
public Observable<ReaderConfig> readerConfigObservable() {
return Observable.combineLatest(
mFontRelay, mFontSizeRelay, (__, ___) -> createReaderConfig());
}
public ReaderConfig createReaderConfig() {
return new ReaderConfig(mThemeRelay.getValue(), mFontRelay.getValue(), mFontSizeRelay.getValue());
}
したがって、基本的には、実際には反応しないコンバイナー関数で themeObservable をプルします。この例外のユースケースに対する適切な解決策はありますか?