Я действительно новичок в разработке Android. В моем приложении я выполняю другую задачу async и должен сохранить результат из этой задачи в базу данных, которая требует context
. Вдохновленный от this ответ Я начал использовать контекст во всех моих классах как переменную-член. Это казалось хорошим методом, но теперь ВСЕ моя фоновая задача и другие классы, которые имеют дело с предпочтением, имеют context
как переменную-член. Пример кода -Использование контекста как переменной-члена во всех классах
public class Task extends AsyncTask<Void, Void, String> {
Context context;
public Task(Context context){
super();
this.context = context;
}
protected String doInBackground() {
//myAsyncTask
..
}
..
protected void onPostExecute(String response) { //response from the request
DbHelper helper = new DbHelper(context);
//save to db
}
У меня есть около 3 или более таких задач, запущенных последовательно в разы. Поэтому, когда мне нужно выполнить фоновое задание, сначала нужно инициализировать задачу async контекстом, а затем инициализировать DbHelper с использованием этого контекста. Я чувствую, что делаю все неправильно. Теперь это не похоже на хороший метод (может привести к огромным утечкам памяти imo). Плюс это похоже на дублирование и что я могу получить доступ к контексту лучше.
Рекомендуется ли использовать такой контекст? Или у него есть недостаток, и мне лучше использовать какой-то другой метод? Что-то вроде
public class MyApplication extends Application {
private static Context context;
public void onCreate(){
super.onCreate();
MyApplication.context = getApplicationContext();
}
public static Context getAppContext() {
return MyApplication.context;
//use context as MyApplication.getAppContext();
}
}
Какой из них лучше использовать?
Но не передает «контекст» везде, как имеющий статический доступ к контексту (что и делает второй метод). – aandis
Нет, потому что вы сохраняете статическую ссылку на него: 'private static Context context;'. – m0skit0
'applicationContext()' в любом случае живет до тех пор, пока приложение живет. Так почему же статическая ссылка на этот контекст плохая? – aandis