liangjingkanji / Net

Android 基于协程/OkHttp网络请求工具
http://liangjingkanji.github.io/Net/
MIT License
1.8k stars 209 forks source link

每次发请求都会创建NetCoroutineScope这样好吗? #220

Closed budaowengd closed 4 months ago

budaowengd commented 4 months ago

当执行 scopeNetLife{ } 代码时,都会创建一个新的 NetCoroutineScope,并且还会创建一个新的 LifecycleObserver。

如果一个页面有几十个请求,或者请求需要频繁发送,那么会创建大量的 NetCoroutineScope 和 LifecycleObserver在内存中。

请问:是否可以使用 LifecycleCoroutineScope 进行封装呢? 每次发请求创建Scope 是否有更好的方法呢?

liangjingkanji commented 4 months ago

内存会根据作用域自动销毁对象, 你不用担心这么低级的问题, 只要不是故意浪费你创建1w个对象都没事, 你无需考虑按字节编程

另外提醒下scopeNetLife里面支持写多个请求

budaowengd commented 4 months ago

谢谢提醒, 不考虑并发请求,如果我在Activity发送过100次请求,会创建100个Scope和100个Observer,onDestory的时候确实是会自动销毁,因为在Activity中通过LifecycleOwner 和 ViewModel获取的Scope都是单例的,没有每次创建,我觉得还是可以借鉴下的。

liangjingkanji commented 4 months ago

作用域如果单例会导致某个请求终止了所有请求, 所以不考虑单例

至于你说多个请求写在一个作用域内, 这和并发没什么关系吧? 也可以串行请求

如果你想使用单例可以自己创建NetCoroutineScope对象自己一直持有, 没要求你一定使用scopeNetLife函数, 你看下scope函数源码就知道了

liangjingkanji commented 4 months ago

ViewModel是单例那是他的生命周期基于ViewModel本身, 而NetCoroutineScope生命周期不可能写个全局的吧?

你不嫌麻烦想单例可以直接自己创建个变量保存