Прочитав статью Avoiding memory leaks от @RomainGuy, я понял, что мое текущее приложение для Android связано с ошибкой передачи основной деятельности приложения. Поэтому всякий раз, когда я, могу ли я просто заменить этот параметр активности на Activity.getApplicationContext().Шаблон команды для передачи методов деятельности приложения?
Но в моем приложении есть определенные классы, которым все еще нужно запускать методы, которые могут быть только членами основной деятельности приложений.
Таким образом, я думал о возможном использовании Command Pattern, чтобы обойти это ограничение.
Проблема заключается в том, что, если мы посмотрим на этот пример:
public class SomeCommandExecuableOnlyByActivity implements Command
{
public void execute(Object data)
{
doIt(((MyActivity)data).getWindow());
}
}
Я бегу снова в тупик необходимости проход вокруг деятельности (на этот раз под видом Object
данные).
Как я могу выбраться из этой «курицы & яйцо»?
Есть ли лучший способ подойти к этой проблеме?
В этой статье нет ничего, что утверждает, что «передача основной деятельности приложения вокруг» является ошибкой. Ввод его в статические элементы данных * является ошибкой, и это основная проблема, стоящая за его первой и третьей пулями в нижней части статьи. IMHO, используйте «приложение», когда вы точно и точно знаете, почему вы его используете. Это не полная замена для «Activity», особенно для работы пользовательского интерфейса. – CommonsWare
@CommonsWare Спасибо за указание на это значительное отличие. В моем случае я сохраняю статический элемент данных SharedPreferences в своем основном Управлении для легкого доступа различными модулями в приложении. Поэтому я могу получить доступ к общим предпочтениям, избегая передачи основной активности в качестве параметра: 'MainActivity.staticPrefs'. Рассматривается ли это «* Ввод его в статические элементы данных»? – ih8ie8
Это хороший вопрос. Поскольку 'SharedPreferences' является интерфейсом, и я не понимаю, где конкретная реализация, я не знаю. Если 'SharedPreferences' хранит' Context' - и это может быть - тогда вам нужно будет либо использовать «Приложение», либо исключить статический элемент данных. Я бы ожидал, что «Приложение» отлично работает с «SharedPreferences». – CommonsWare