将上下文传递给非活动类的最佳实践?
所以,我的第一个主要应用程序几乎编码,我正在对我的代码进行优化。 该应用程序工作正常,但我不知道我的方式传递到其他类的上下文。 我不想这样做。 我偶然发现了关于上下文的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); } }
这个可以吗? 如果有人能够提供一个容易阅读的文章与关于这个问题的例子将是很好的。
您可以使用ContextWrapper
来完成此操作, 如此处所述。
例如:
public class MyContextWrapper extends ContextWrapper { public MyContextWrapper(Context base) { super(base); } public void makeMyAppAwesome(){ makeBaconAndEggsWithMeltedCheese(this); } }
并从Activity中调用非活动类
new MyContextWrapper(this);
你也可以在onCreate()
方法中创build一个初始化的MainActivity
的静态实例引用
public class MainActivity extends AppCompatActivity { public static MainActivity mMainActivity; @Override private onCreate(Bundle savedInstanceState){ //... mMainActivity = this; } }
并像这样调用上下文:
MainActivity.mMainActivity;
或者写一个getInstanceOf()
方法,如果它更清楚和/或你更喜欢使用一个存取器
MainActivity.getInstanceOf();
如果稍后决定要调用主要活动中包含的实例方法,则此策略可能会为您提供一些灵活性,如下所示:
MainActivity.mMainActivity.myInstanceMethod();
只是一个build议。 批评是受欢迎和鼓励的。