Closed octopuslaowang closed 2 months ago
首先不管是什么问题,什么原因,赋null值的做法是错的。因为你观察这个flag的作用,它仅仅是帮我们检测出一种情况,及早的报错出来,避免出现难以定位的更多bug。就是那段注释的意思。所以赋null还不如把这个flag删了呢。
或者说你描述的场景就是这个flag需要检测出的一种情况。
这段代码确实没有给出更优雅的结束PPS的实现。而仅仅是依赖上层调用代码不要搞出多实例的复杂场景。所以这里只保证如果PPS是单例的,而且这个进程就是PPS触发创建的,就是这样理想的情况,这样的话,PPS才能如我们所想的工作正常。
如果不解绑PPS,PPS进程被杀掉了,然后系统重启了PPS。那这个PPS应该也是可以正常用的呀。主进程只需要正常查询它已经加载什么插件了就行了吧?
首先不管是什么问题,什么原因,赋null值的做法是错的。因为你观察这个flag的作用,它仅仅是帮我们检测出一种情况,及早的报错出来,避免出现难以定位的更多bug。就是那段注释的意思。所以赋null还不如把这个flag删了呢。
或者说你描述的场景就是这个flag需要检测出的一种情况。
这段代码确实没有给出更优雅的结束PPS的实现。而仅仅是依赖上层调用代码不要搞出多实例的复杂场景。所以这里只保证如果PPS是单例的,而且这个进程就是PPS触发创建的,就是这样理想的情况,这样的话,PPS才能如我们所想的工作正常。
如果不解绑PPS,PPS进程被杀掉了,然后系统重启了PPS。那这个PPS应该也是可以正常用的呀。主进程只需要正常查询它已经加载什么插件了就行了吧?
非常感谢耐心回复! 但是还有几点补充和疑惑,麻烦有空再帮忙解答一下。
目前我的业务场景有个前提是,必须主动关闭 PPS 进程。 基于这个前提,只能去解绑 PPS,所以才会发生这样的问题(解绑 PPS 后,进程还没被杀之前,又创建 PPS 的异常)。 当然解法可以有很多种,我的解法的确破坏了 sSingleInstanceFlag 设计的初衷。
看了你的回复,我的理解是
BasePluginProcessService.java
BasePluginProcessService 中 sSingleInstanceFlag 用来保证 PPS 单例,当同一个进程再次创建 PPS 时会在 onCreate 中会触发异常(PPS出现多实例)
目前问题: 当主动杀进程时,需要主动去解绑 PPS (否则系统框架在进程被杀后会重启 PPS,并且重启进程)。如果在解绑 PPS 后(onDestroy 之后),进程还没被杀之前,立即又触发了插件加载,需要重新绑定并创建 PPS ,此时会触发 onCreate 中的异常
目前解法: 在 onDestroy 中添加 sSingleInstanceFlag = null;
主要想咨询的问题是,不知道目前这样的解法,会不会对 Shadow 框架产生其他的影响
麻烦有空帮忙看一下,感谢!