2010-09-23 2 views
0

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

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

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

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

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

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

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

ответ

7

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

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

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

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

Также зарегистрируйтесь this answer.

+1

Благодарим за отзыв. Я делаю большую часть своей тяжелой работы в IntentService (где у меня есть доступ к Контексту приложения), и большинство других вызовов моих глобальных данных будут изнутри Activities; поэтому я думаю, что все будет в порядке. В других местах (например, в моем примере OP) я могу просто передать данные. – Andrew

+0

Я пытался получить ссылку на мой объект MyApplication в классе, который не был активным, поэтому я не мог использовать типичную (MyApplication) this.getApplication(). Именно здесь ваш совет очень помог, я просто передал контекст и получил ссылку на MyApplication, спасибо TON! – Soham

1

Прохождение по Контексту прекрасно работает в Android, если вы передаете правильный контекст. Избегайте передачи активности как контекста. Вместо этого используйте getApplicationContext().

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

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

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

+1

Просто примечание относительно прохождения по getApplicationContext(). Не используйте его для запуска намерения открыть веб-страницу - это вызовет исключение. :) – benvd

Смежные вопросы