Может ли кто-нибудь объяснить разницу между передачей контекста активности внутреннему классу и простой ссылкой на него с помощью MyActivity.this? - PullRequest
4 голосов
/ 13 июля 2011

А какой путь лучше?

Дайте мне знать, если вопрос требует уточнения.

Ответы [ 3 ]

3 голосов
/ 13 июля 2011

Для повторного использования контекст проще, так как вы можете просто скопировать его в другой проект.В противном случае вам придется изменить все MyActivity.this на OtherProjectActivity.this.

Но больше всего не имеет значения, что вы используете

3 голосов
/ 18 июля 2011

Я решил ответить на свой вопрос не потому, что любой из ответов плохой, а потому, что, хотя они одинаково хороши, никто не дает полного ответа.

Похоже, что одним из основных факторов, которые следует принимать во внимание, является возможность повторного использования:

Использование MyActivity.this для ссылки на контекст означает, что вам придется изменить свой код, если вы когда-нибудь решите использовать класс в другом проекте / классе / контексте.

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

Другим фактором, который будет влиять на ваш выбор, является то, является ли ваш внутренний класс публичным или закрытым. Не имеет смысла делать внутренний класс общедоступным, а затем ссылаться на контекст с помощью MyActivity.this. Приложение принудительно закроет момент, когда вы используете класс из другого действия. Я бы сказал, однако, что открытый класс принадлежит в своем собственном файле, но это зависит от отдельного разработчика.

Наконец, существует проблема простоты, поскольку проще написать MyActivity.this, чем реализовать конструктор и т. Д. Эта кажущаяся простота может вернуться и укусить вас, как вы можете видеть выше, если вы решите, что вам нужно использовать класс где-то еще.

Я буду продолжать использовать MyActivity.this для простоты для всех встроенных обработчиков событий, но для любой другой ситуации кажется, что передача контекста конструктору является наилучшей практикой.

1 голос
/ 13 июля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...