Подтвердить что ты не робот

Контекст Android Intent Confusing

Может кто-нибудь объяснить это мне, пожалуйста:

Intent intent = new Intent(Context, AlarmReceiver.class);

Я никогда не понимал, и я серьезно думаю, что никогда не буду, если кто-то не попытается это объяснить мне подробно. Весь этот контекст настолько запутан для меня. Иногда он работает следующим образом:

Intent intent = new Intent(getBaseContext(), AlarmReceiver.class);

Иногда он не работает, но он принимает только:

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

Иногда его:

Intent intent = new Intent(this, AlarmReceiver.class);

и т.д.. и т.д. и многие другие.

Я понимаю основы контекста, но сколько их там? И почему затмение бросает мне ошибку один раз и в другой раз ее штраф? Почему нам нужно иногда указывать контекст?

Context context;

Я не могу найти правильный контекст для всех ситуаций, как я узнаю, что является правильным в каждой ситуации?

4b9b3361

Ответ 1

Прежде всего, позвольте мне объяснить, что контекст немного лучше, а затем перейдем к тому, как его можно использовать и получать, По сути, контекст - это ссылка на привязку ваших ресурсов к вашей программе. Каждому объекту присваивается свой собственный контекст, который содержит ресурсы, необходимые для установки этого объекта. Это необходимо для создания многих объектов, а также для получения информации, идентифицирующей программу, среди прочих целей. Это делает его неоценимым для создания новых видов и видов деятельности, но его также можно использовать для других целей. См. Также этот ответ для получения дополнительной информации.

Контекст для элемента может исходить из разных мест. Иногда он сохраняется и должен быть извлечен, иногда он наследуется. В принципе, это объектно-ориентированное программирование.

Просто дайте несколько примеров:

Activity наследует контекст. Таким образом, если вы находитесь в действии, вам нужно только перейти к использованию контекста. Он также содержит указатель на getBaseContext(). Иногда вам может понадобиться ссылка на него, если вам нужен весь контекст приложения, но, скорее всего, вы не захотите на некоторое время.

View не наследует контекст. Однако у него есть метод getContext(). Если вам нужно получить контекст из представления, это способ его получить. Этот контекст не будет полным, но будет иметь только контекст для содержимого View.

Fragments также не наследуют контекст. Они содержат метод getActivity(), который, если Fragment активен, вернет действие, которое является контекстом для фрагмента.

BroadcastReceivers также не наследуют контекст. Фактически, они вообще не содержат контекста, но просто получают текущий контекст при получении события (например, onReceive (контекст контекста, намерение намерения))

Ответ 2

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

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

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

То же самое верно для всех типов контекста.

Если вы попытаетесь использовать alertDialog в компоненте службы с помощью контекста "this". Попробуйте это, и я уверен, что вы обязательно получите исключение, так как "this" представляет среду службы при ее использовании. И поскольку это фоновая составляющая мы не можем добавить в него окно. Именно он скажет вам неправильное исключение token.Which означает, что токен, созданный для окружающего представления, не подходит для отображения alertDialog.

Надеюсь, это даст вам краткое представление о том, что вы хотите.

Ответ 3

Контекстные возможности

Общие действия, которые вы можете безопасно принимать с заданным объектом Контекста, зависят от того, откуда он был изначально. Ниже приведена таблица общих мест, в которой приложение получит контекст, и в каждом случае то, что полезно для:

введите описание изображения здесь

  • Приложение может начать работу здесь, но для этого требуется создать новую задачу. Это может соответствовать конкретным вариантам использования, но может создавать нестандартные поведения в обратном стеке в вашем приложении и обычно не рекомендуется или считается хорошей практикой.
  • Это законно, но инфляция будет производиться с помощью темы по умолчанию для системы, на которой вы работаете, а не на то, что определено в вашем приложении.
  • Разрешено, если приемник имеет значение null, которое используется для получения текущего значения липкой трансляции, на Android 4.2 и выше.

Оригинальная статья здесь.