繁体   English   中英

Android - 与MVP的上下文

[英]Android - context with MVP

我是关于使用MVP实现创建一个简单的应用程序,并尝试在演示者中发出权限请求。 要发出权限请求,我需要像这样传递Context。

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

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

谢谢

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

做这些事情我总是记得一个好的句子,那就是Do not inject objects, inject operations and behavior

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

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

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

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

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

interface View {
   Context getContext();
}

interface Presenter {
   void setView(View view);
}

因此,PresenterImpl实现了一个视图,onCreate活动并将其重置为活动的Destroy。 因此,演示者永远不会直接持有上下文。 但它持有的观点,其中有关于视图的知识。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM