Лучшая практика передачи контекста в классы без активности?
Итак, мое первое основное приложение почти закодировано, и я делаю оптимизацию в своем коде. Приложение прекрасно работает, но я не уверен в том, как передать этот контекст другим классам. Я не хочу делать это неправильно. Я наткнулся на статьи и вопросы здесь, в 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);
}
}
Это нормально? Было бы неплохо, если бы кто-то мог предоставить легко читаемую статью с примерами по этому вопросу.
Ответы
Ответ 1
Вы можете сделать это, используя ContextWrapper
, как описано здесь.
Например:
public class MyContextWrapper extends ContextWrapper {
public MyContextWrapper(Context base) {
super(base);
}
public void makeMyAppAwesome(){
makeBaconAndEggsWithMeltedCheese(this);
}
}
И вызовите класс non activity, как это из Activity
new MyContextWrapper(this);
Ответ 2
Вы также можете создать ссылку на статический экземпляр для вашего MainActivity
, инициализированный в методе onCreate()
public class MainActivity extends AppCompatActivity {
public static MainActivity mMainActivity;
@Override
private onCreate(Bundle savedInstanceState){
//...
mMainActivity = this;
}
}
и вызовите контекст следующим образом:
MainActivity.mMainActivity;
или напишите метод getInstanceOf()
, если он более четкий и/или вы предпочитаете использовать аксессор
MainActivity.getInstanceOf();
Эта стратегия может предоставить вам некоторую гибкость, если позже вы решите вызвать метод экземпляра, содержащийся в вашем основном действии, например:
MainActivity.mMainActivity.myInstanceMethod();
Просто предложение. Критика приветствуется и поощряется.