Расширение приложения

Я хотел бы расширить приложение в моем приложении для Android. Я сделал это так, что создал расширенный объект Application под названием MyApplication и добавил его в манифест.

Теперь я хотел бы добавить несколько методов получения и установки для хранения некоторой информации. Похоже, мне нужно передать контекст приложения любым классам, которые не содержат контекст.

Например, скажем, я создал класс с именем MyObject (в своем собственном Java-файле):

public class MyObject {
  public void doStuff() {
    // do stuff
  }
}

Как я могу получить доступ к MyApplication из doStuff ()? Похоже, мне нужно передать контекст приложения в MyObject. Это типично? Есть ли вероятность утечки?

Кроме того, чтобы убедиться, что я уверен, MyApplication (и переменные внутри него) будут жить в течение жизненного цикла приложения или нет? В любом случае это хорошо. Я просто хочу убедиться, что я это учту, если мне нужно.

И, наконец, любые ссылки на некоторые примеры источников, чтобы показать, для чего полезны разные вещи, расширяющие Application.

Ответы на вопрос(2)

Решение Вопроса

передача контекста не является исключительной в разработке Android. Ну, или это, или я делаю это неправильно.

Я не уверен, что вам нужно это ответили или нет, но из контекста, вы можете получить доступ кApplication объект как это:

((MyApplication) context.getApplicationContext()).getMyGlobalVariable();

ВашMyApplication Да, класс должен жить в течение всего жизненного цикла приложения.

Также проверьтеэтот ответ.

 Andrew23 сент. 2010 г., 17:46
Благодарю за ваш ответ. Я выполняю большую часть тяжелой работы в IntentService (где у меня есть доступ к контексту приложения), и большинство других вызовов моих глобальных данных будет происходить изнутри; так что я думаю со мной все будет в порядке. В любых других местах (как в моем примере с OP) я могу просто передать данные.
 Soham23 окт. 2011 г., 18:46
Я пытался получить ссылку на мой объект MyApplication в классе, который не был активностью, поэтому я не мог использовать типичный (MyApplication) this.getApplication (). Вот где ваш совет очень помог, я только что прошел контекст и получил ссылку на MyApplication, спасибо ТОН!

если вы передаете правильный контекст. Избегайте передачи деятельности в качестве контекста. использованиеgetApplicationContext() вместо.

Ваш объект приложения и все связанные с ним данные будут сохраняться в течение всей жизни вашего приложения. Даже если приложение работает в фоновом режиме и все действия удаляются из памяти, потому что они больше не отображаются. В какое время объект приложения будет очищен из памяти, что не очень хорошо задокументировано, но я думаю, что если ваше приложение находится в фоновом режиме, а память редко, ОС может уничтожить все ваше приложение и, следовательно, также удалить объект приложения из памяти.

Невозможно получить объект приложения, если вы не можете получить доступ к контексту. Если вам нужна только ссылка на приложение, просто передайте объект приложения, это сведет к минимуму ошибки, которые могут возникнуть при сохранении ссылки на действие, которого больше нет на экране, и утечка всей активности через эту ссылку.

У меня нет примера кода, но я использовал его для хранения ссылок на некоторые задачи. Это позволило мне позволить пользователю быстро переключаться между действиями, не заставляя его ждать возвращения задач, даже если следующее действие должно изменить некоторые состояния в зависимости от задач, которые выполняются в данный момент.

 benvd23 сент. 2010 г., 21:50
Просто примечание о передаче getApplicationContext (). Не используйте его для запуска намерения открыть веб-страницу - это вызовет исключение. :)

Ваш ответ на вопрос