context用法 - android import context




將Context傳遞給非活動類的最佳實踐? (2)

所以,我的第一個主要應用程序幾乎已編碼,我正在對我的代碼進行優化。 該應用程序工作正常,但我不確定我將上下文傳遞給其他類的方式。 我不想以錯誤的方式去做。 我在Stackoverflow中偶然發現了關於上下文的文章和問題,這是將它傳遞給非活動類的正確方法。 我也閱讀了文檔,但作為一名芬蘭人,使復雜的技術更難以理解。

所以,一個簡單的問題。 我將主要活動的上下文傳遞給其他(幫助者)類的方式是否正確? 如果沒有,我在哪裡可以閱讀更多關於這些情況的更好實踐。

例如:MainActivity.java

public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle sis){
        super(sis);
        new Helper(MyActivity.this).makeMyAppAwesome();
    }
}

Helper.java

public class Helper {
    Context context;
    Helper(Context ctx){
        this.context = ctx;
    }

    public void makeMyAppAwesome(){
        makeBaconAndEggsWithMeltedCheese(context);
    }
}

這個可以嗎? 如果有人可以提供一個易於閱讀的文章,並提供有關此主題的示例,那將是很好的。


在需要時只傳遞當前上下文通常符合您的最佳利益。 將其存儲在成員變量中可能會導致內存洩漏,並在您的應用中構建更多活動和服務時開始導致問題。

public void iNeedContext(Context context) {...

此外,在任何具有上下文的類中,我建議為可讀性和可搜索性創建成員變量,而不是直接傳遞或(ClassName.)this 。 例如,在MainActivity.java

Context mContext = MainActivity.this;
Activity mActivity = MainActivity.this;

您可以使用ContextWrapper執行此操作, 如此處所述。

例如:

public class MyContextWrapper extends ContextWrapper {

    public MyContextWrapper(Context base) {
      super(base);
   }

    public void makeMyAppAwesome(){
        makeBaconAndEggsWithMeltedCheese(this);
    }
}

並從Activity中調用非活動類

new MyContextWrapper(this);






android-context