簡體   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