4

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

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

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

谢谢

4

2 回答 2

4

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

做这些事情我总是记得一句好话,就是这样Do not inject objects, inject operations and behavior

它是如此简单,不要将您的上下文注入您的演示者,这是一种错误的做法。而是在您的视图合同(视图接口)中添加一个调用的函数,getPermission()然后在您的视图中实现该方法以及您的合同的其他方法,然后在您需要许可时调用该方法。

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

于 2017-04-29T03:59:50.277 回答
1

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

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

您不应该在演示者中拥有上下文的主要原因之一是,可能存在对演示者的引用,这可能会泄漏活动。在我必须处理活动中的上下文的地方,我通过 Views 访问。

interface View {
   Context getContext();
}

interface Presenter {
   void setView(View view);
}

因此 PresenterImpl 实现了一个视图,即活动的 onCreate 并将其重置为活动的 onDestroy。所以演示者从不直接掌握上下文。但它拥有视图,它具有关于视图的知识。

于 2017-04-28T21:55:26.473 回答