Как предоставить Context для вызова необходимых функций в моем собственном служебном классе - PullRequest
2 голосов
/ 11 ноября 2010

Иногда мне нужно предоставить объект Context для вызова определенных функций, таких как

Intent intent = new Intent(context, MyClass.class);

, чтобы запустить службузапрос

Cursor cursor = context.managedQuery(uri, projection, null, null, null);

Если это делается в классе пользовательского интерфейса, который расширяет Activity, это нормально.Однако, если я хочу создать свой собственный служебный класс (одноэлементный), который ничего не расширяет, и вызвать эти функции, у меня нет необходимого объекта Context.Теперь мой обходной путь - передать ссылку на активность при инициализации служебного класса и иметь эту ссылку для вызова этих функций.Мне интересно, как правильно это сделать.Не должно быть разумным иметь каждый класс для расширения контекста, чтобы он мог вызывать эти функции.

Ответы [ 2 ]

6 голосов
/ 11 ноября 2010

Теперь мой обходной путь - передать ссылку на активность при инициализации служебного класса и использовать эту ссылку для вызова этих функций. Мне интересно, как правильно это сделать.

Абсолютно нет. Вы теряете память этого действия, удерживая статическую ссылку на него.

Пусть методы вашего служебного класса принимают Context в качестве параметра. Или используйте getApplicationContext(), чтобы получить контекст одноэлементного приложения и передать его в свой конструктор служебного класса. Объект контекста приложения будет жить так же долго, как и процесс.

5 голосов
/ 11 ноября 2010

Вы также можете рассмотреть расширение Application и инициализацию ваших синглетонов в onCreate -методе как обычных объектов. Затем вы можете получить доступ к Application -объекту в разделе «Действия», используя getApplication. Application также предоставляет доступ к контексту приложения, поэтому вам не придется беспокоиться об этом в своей деятельности.

Таким образом, все состояние вашего общего приложения сосредоточено в одном месте, и вам не нужно возиться со статическими инициализаторами.

...