复现:1、在定义参数job的时候同时对job初始化,在onDestroyView 或者 onDestroy里cancel;
2、存在多个fragment,且fragment会被保持状态,而不是离开就被销毁。
3、复现过程,A打开B,B打开C,C回退到A,B&C被销毁,onDestroy被调用(应该说cancel被调用);这个时候A里的协程是不会再可以被调用了,那种感觉就像是这段代码没写似的。
修复:重新进入页面的时候必须重新初始化job,除非你一直不调用cancel。
原因:....猜测 CoroutineContext 被共享了??? 不太清楚,有时间再研究吧
这里是其他界面的cancel被调用,所以感觉很纳闷,这玩意不是独立的吗?为啥其他页面的cancel被调用了,我这边不重新初始化就用不了了呢?是因为cancel的是总的栈?

本文探讨了在Android中,如何处理Fragment状态保留导致的CoroutineContext共享问题,特别是在A->B->C回退流程中job无法继续执行的情况。作者提出重新初始化job的必要性,并暗示可能的原因是CoroutineContext在多个Fragment间共享。

977

被折叠的 条评论
为什么被折叠?



