Android - MVP 背景

Android - context with MVP

我要创建一个带有 MVP 实现的简单应用,并尝试在演示者中提出权限请求。要发出权限请求,我需要像这样传递上下文。

        // Location permission has not been granted yet, request it.
        ActivityCompat.requestPermissions(fragmentActivity, new String[]{permission}, requestId);

我读过几篇文章,他们提到在演示者中使用 Context 不是一个好的练习。所以,我只是想知道人们如何使用 MVP 处理权限请求。而且我真的不知道为什么在演示者中使用 Context 不是一个好习惯。 请帮助我理解我应该如何处理权限请求以及为什么使用上下文不是好的做法。

谢谢

实践中有多种 MVP。我不是来这里开始辩论哪个是对的,哪个是错的。只要特定风格适用于您的场景,就应该使用它。

相反,我将尝试解释为什么应避免 Presenter 中的上下文以及我在代码中避免的方法之一。

presenter 中不应该有上下文的主要原因之一是可能存在对 presenter 的引用,这可能会泄漏 activity。在我必须处理 activity 中的上下文的地方,我已通过视图访问。

interface View {
   Context getContext();
}

interface Presenter {
   void setView(View view);
}

因此 PresenterImpl 实现了一个视图,activity 的 onCreate 并在 activity 的 onDestroy 重置它。所以演示者从不直接掌握上下文。但它持有视图,该视图具有关于视图的知识。

绝对不能将任何与Android相关的对象发送到presenter层,它们必须完全解耦。

做这些事我一直记得一句好话Do not inject objects, inject operations and behavior

很简单,不要将您的上下文注入您的演示者,这是一种错误的做法。相反,在您的视图合同(视图界面)中添加一个名为 getPermission() 的函数,然后在您的视图中实现该方法以及合同的其他方法,然后在需要权限时调用该方法。

这是最好的方法。相信我 ;)