๋ฆฌ์ฌ์ดํด๋ฌ๋ทฐ์ ๋ฆฌ์คํธ ์์ดํ ์ ์ฐ์๋๋ ํด๋ฆญ ์ด๋ฒคํธ๋ฅผ ๋ง๊ณ ์ RxJava์ throttleFirst๋ฅผ ํ์ฉํ์ต๋๋ค.
(์ ๋ ์ด ์์ ์ด RxJava์ ์์ฉ์ ์ ๊ฐ ํ ๋ฐ์ง ๋ ๋์๊ฐ๋ค๋ ์๊ฐ์ ์ฌ๋ฌด์ค์์ ๋ด์ ๊ธฐ์จ์ ๋๋ ธ์ด์.)
๋ฉ๋ชจ๋ฆฌ ๋์๋ ์์ง ๋ง๊ณ ๋ง์์ผ์ง๐ ์ด๋ฌ๊ณ RecyclerView์์ RxJava์ dispose๋ฅผ ์งํํ ์ ๋นํ ์ฝ๋ฐฑ ํจ์๊ฐ ์๋ ๊ตฌ๊ธ์๊ฒ ๋ฌผ์ด๋ดค์ต๋๋ค.
StackOverFlow์์ ์ด๋ํฐ ์์ onViewDetachedFromWindow๋ฅผ ์ด์ฉํ๋ฉด ๋๋ค๋ ๊ธ์ ํ์ธํ๊ตฌ์.
๋ค์๊ณผ ๊ฐ์ด ์ฝ๋๋ฅผ ์งฐ์ด์.
override fun onViewDetachedFromWindow(holder: RecyclerView.ViewHolder) {
if (holder is ViewHolder) {
holder.disposable.dispose()
}
super.onViewDetachedFromWindow(holder)
}
๊ทธ๋ฆฌ๊ณ ์ด์๊ฐ ๋ฐ์ํ์ต๋๋ค. ๐ง
ํด๋น RecyclerView์ ๋ฆฌ์คํธ๋ฅผ ์คํฌ๋กคํด์ ์ ๊น ๊ฐ๋ ค์ก๋ค๊ฐ ๋ค์ ๋ณด์ด๊ฒ ๋ ๋ฆฌ์คํธ ์์ดํ ์์๋ ํด๋ฆญ ์ด๋ฒคํธ๊ฐ ๋จนํ์ง ์์์ต๋๋ค.
RecyclerView์ ์์ดํ ์ด ํ๋ฉด์ ๋ ธ์ถ๋์ง ์์์ ๋ onViewDetachedFromWindow()๊ฐ ํธ์ถ๋์๊ธฐ์ ์ด๋ฏธ dispose() ์ฝ๋๊ฐ ์คํ๋์๋ ๊ฒ์ด์์ด์. ๊ฐ๋ ค์ง ๊ทธ ์์ดํ ์ด ๋ค์ ํ๋ฉด์ ๋ ธ์ถ๋์ด ์์ฑ๋ ํด๋ฆญ ์ด๋ฒคํธ ์คํธ๋ฆผ์ ๊ทธ ๋๊ตฌ๋ ๋ฐ์์ฃผ์ง ์๊ณ ํ๋ฌ๊ฐ๊ฒ ๋์๋ ๊ฑฐ์์ด์.... ๐ข(๋๋ฌผ ๋๋ฅด๋ฅด)
์ ์ ๋ฐ์ฑ์ ์๊ฐ์ ๊ฐ์ง๊ณ ...๐ onViewDetachedFromWindow์ ๋ํด ์ ๋ชจ๋ฅด๊ณ ์ฝ๋๋ฅผ ์์ฑํ๋ค๋ ๊ฒ์ด ์ด๋ ๊ฒ ๋๋ฌ๋ฌ์ต๋๋ค. ๋ถ๋๋ฝ์ต๋๋ค.๐๐ข
์ด๋ฐ ์ํฉ์ ๋ง์ดํ๊ณ ๋์์ผ 'RecyclerView์ RxJava๋ฅผ ์ฌ์ฉํ๋๊ฒ ๋ง๊ธฐ๋ ํ๊ฑด๊ฐ?'๋ผ๋ ์ง๋ฌธ์ด ๋ค์์ด์. Activity๋ Fragment๊ฐ destroyed ๋๋ ์ํ์ ์ฝ๋ฐฑ ํจ์์์ dispose()๋ฅผ ์คํํ๋ ์ฝ๋๋ค๋ง ๋ดค์ง, RecyclerView์์ ์ฌ์ฉํ๋ ๊ฒ์ ์ฌ์ค ๋ณด์ง ๋ชปํ๋ค๋ ์๊ฐ์ด ๋ค๋๊ตฐ์.
๊ทธ๋ฆฌ๊ณ ๋๋ฌด๋ ๊ฐ์ฌํ ๊ธ์ ์ฐพ์์ด์.
์ ๊ฐ ๋์์ ๋ฐ์ ๋ถ๋ถ์ ์ฌ๊ธฐ์ ๋๋ค.
It would be easier to answer if you could provide the code of the adapter. In general, Disposable should be disposed with respect to your business logic and the component containing lifecycle.
I would also say that it is better to not use Rx inside of RecyclerView adapter. Here are the benefits:
- Adapter logic remains simple and synchronous.
- You don't need to think about possible lifecycle or multithreading issues when developing the adapter.
- Rx streams always allocate a lot of memory, so (if we talk about RecyclerView) putting them into the wrong place can lead to performance issues.
So, I'd suggest moving Rx streams into Presenter/ViewModel or similar component.
๋ฐ๋ฒ์ญ์ ํ์๋ฉด
๋น์ ์ด ์ด๋ํฐ์ ์ฝ๋๋ฅผ ์ ๊ณตํ๋ ๊ฒ ๋ ์ฌ์ธ ๊ฑฐ์์. ๋ณดํต, Disposable์ ๋น์ ์ ๋น์ง๋์ค ๋ก์ง๊ณผ ์ปดํฌ๋ํธ์ ๋ผ์ดํ์ฌ์ดํด์ ๋ฐ๋ผ dispose๋์ด์ผ๋งํด์.
๋ RecyclerView ์ด๋ํฐ ์์๋ Rx๋ฅผ ์ฐ์ง ์๋๊ฒ ๋ซ๋ค๋ ๋ง์ ํ๊ณ ์ถ๋ค์.
-์ด๋ํฐ ๋ก์ง์ ๊ฐ๋จํ๊ณ ๋๊ธฐ์ ์ด์ฃ
-์ด๋ํฐ๋ฅผ ๊ฐ๋ฐํ ๋์ ๊ฐ๋ฅํ ๋ผ์ดํ์ฌ์ดํด ๋๋ ๋ฉํฐ์ฐ๋ ๋ ์ด์๋ค์ ์๊ฐํ ํ์๊ฐ ์์ด์.
-Rx ์คํธ๋ฆผ์ ํญ์ ๋ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํด์, ๋ง์ฝ (์ฐ๋ฆฌ๊ฐ ๋ฆฌ์ธ์ดํด๋ฌ๋ทฐ์ ๋ํด์ ๋งํ๋ค๋ฉด) ์๋ชป๋ ๊ณณ์ ๊ฐ์ ธ๋ค ์ฐ๋ฉด ํผํฌ๋จผ์ค ์ด์๋ฅผ ๋ง๋ค ์ ์์ด์.
๊ทธ๋์ Rx ์คํธ๋ฆผ์ Presenter/ViewModel ๋๋ ๋น์ทํ ์ปดํฌ๋ํธ๋ก ์ฎ๊ธฐ๋ ๊ฒ์ ๊ถํด์.
์ ๋ ๊ฒ ์น์ ํ๊ฒ ๊ธ์ ์์ฑํด์ฃผ์ Dimsky๋๊ป ๊ฐ์ฌ๋ฅผ ๋๋ฆฌ๋ฉด์, ์ฝ๋ ์์ ํ์ต๋๋ค.
ํด๊ฒฐ๋์ ๋คํ์ด์์. ๋๐
'๋น ๊ตฌ๋ฉ ์ฑ์ฐ๊ธฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] Version ๊ต์ฒด (0) | 2021.02.18 |
---|---|
[Programming] ๋ฉฑ๋ฑ(ๅช็ญ, idempotent) (0) | 2021.02.18 |
[Library] Moshi Converter (0) | 2021.02.18 |
[Java] Class.java public boolean isAssignableFrom(Class<?> cls) (0) | 2021.02.17 |
[Kotlin] ::class.java (0) | 2021.02.17 |