采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
请问一下,视屏中提到在Activity销毁时,取消异步任务。在开发过程中,对于网络请求这种,在Activity销毁时也需要取消吗?如果需要取消,有比较优雅的方式来处理吗?
同学你好,关于这个问题可以具体情况具体对待:
首先,异步网络请求,我们可以分为两种,一种我们称之为数据流,也就是获取网络数据,用于页面的展示。对于这种情况,如果数据不需要缓存,且只有当前页面使用这个数据时,是可以随着Activity的销毁去取消这个任务的。
另一种,我们称之为控制流,也就是给服务器提交数据或者改变服务器数据状态的操作,这种情况如果取消网络请求,就有可能引起业务上的bug了。
然后我们再来说一下如何取消的问题,一般来说,我们使用的网络框架,基本上都无法做到把一个正在发送的网络请求中途关闭。所以我们只能在请求返回时不去响应返回结果,做到避免处理数据,节约资源的目的。
另外,成熟的App框架,一般都会设计一个任务队列(可以用线程池实现),避免并发大量请求的并发。在这种情况下,就可以通过把任务移除出队列的方式,来取消任务。
总体来说,别让异步任务持有Activity等不必要的实例,就能避免内存泄漏。另外,别浪费资源去处理不需要被展示的数据。
登录后可查看更多问答,登录/注册
Android面试全攻略
677 4
845 3
623 3
955 3
941 3
购课补贴联系客服咨询优惠详情
慕课网APP您的移动学习伙伴
扫描二维码关注慕课网微信公众号