关于mvp view被销毁后present回调view造成的空指针问题

当我们在使用 MVP 的时候(应该其他场景也有这种情况),我们在请求网络的时候,网络还没返回,这个时候View 被销毁了,那么 View 为 Null,这个时候去调用 View 的方法,就会造成空指针异常,一般来说,我们可以在销毁的时候进行cancel请求,但是也有可能没有被cancel,在这种情况下,我们可以用判空的方法来进行处理,比如:

                if (view != null) {
                    
                }

但是这样写的话就会造成所有的地方都需要写这个判空语句,很繁琐,很麻烦,有一个比较好的处理方式,那就是 动态代理,关于动态代理可以看我之前的文章动态代理

@Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        if (mObject != null) {
            return method.invoke(mObject, args);
        }
        Log.e("TAGTAG", "object is  null ");
        return null;
    }

每次调用view(也就是Activity)的方法的时候都会先进行判空,如果不为空才继续调用。

至于这个动态代理写在那里,每个人用的方式不一样可能也不同,我这里提供一种思路吧:
我们知道Activity需要和Present进行绑定,我们可以在绑定的时候绑定Activity的代理对象,这样每次调用方法的时候都是通过代理调用的,都会走上面的那个方法进行判断。

发布了65 篇原创文章 · 获赞 24 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/shanshui911587154/article/details/85229813
MVP