2016-12-26 4 views
1

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

Вопрос в том, что при запуске другого действия, почему это ключевое слово передано как параметр контекста для намерения?

Intent foo = new Intent(this, viewContacts.class); 

Я понимаю, что любая деятельность, расширяет класс контекста, но почему это, что мы передаем контекст активности и не контексте в приложения?

Мои точечно

Когда другая деятельность начинается текущая деятельность будет разрушаться, но его контекст будет передан другой. Ссылаясь на this статье говорится, что

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

Итак, мы не передаем контекст текущей деятельности другому, где первый выходит за рамки? Разве это не пример утечки памяти?

+1

В этом случае (конструктор 2-аргумента для Intent) параметр 'Context' используется только для определения имени пакета целевой« Activity ». Вот и все. Пожалуйста, см. Мой ответ на аналогичный вопрос здесь: http://stackoverflow.com/a/38870648/769265 –

+0

@DavidWasser благодарит за ваш ответ! –

ответ

3

Почему мы передаем контекст активности, а не контекст приложения?

Любой из них будет работать здесь. this меньше набирает и быстрее выполняет, чем getApplicationContext().

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

Вы считаете, что Intent удерживается на этом Context. Это не.

Итак, мы не передаем контекст текущей деятельности другому, где первый выходит за рамки?

Номер

Intent может либо быть неявным или явным. Явным явлением Intent является приложение, имеющее прикрепленный файл ComponentName, определяющий конкретное приложение (по имени пакета) и класс Java (по полностью квалифицированному названию класса) компонента, для которого предназначен этот Intent. Двухпараметрический конструктор, предоставляющий объекты Context и Class, используется для построения этого ComponentName. Ни один из Intent, ни ComponentName не удерживаются на Context после завершения работы конструктора.

+0

Спасибо! Это отвечает на мой вопрос. Но ты только сказал, что это будет работать здесь. Я действительно запутался, поскольку контекст контекста и контекст контекста имеют различную информацию. –

+0

Итак, как можно использовать оба из них? Кроме того, почему «это» быстрее выполнить, чем getApplicationContext()? Это потому, что когда мы вызываем getApplicationContext(), а «это» уже доступно нам. –

+1

@RohanBhatia: Я рекомендую [это сообщение в блоге] (https://possiblemobile.com/2013/06/context/), чтобы дать вам представление о разных ролях различных объектов Context. Оба могут использоваться, потому что оба они возвращают одинаковые значения для соответствующих методов (например, 'getPackageName()'). 'this' является объектом; 'getApplicationContext()' - метод, возвращающий объект. Выполнение работы (вызов метода) всегда медленнее, чем выполнение этой работы. – CommonsWare

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

  • Нет связанных вопросов^_^