В чем разница между явным и неявным вызовом активности в Android?

В чем разница между явным и неявным вызовом активности в Android? Если вы объясните ответ на простом примере, будет хорошо.


person Adham    schedule 22.04.2012    source источник
comment
Связанная тема - Неявные намерения Android VS явные намерения   -  person RBT    schedule 30.08.2018


Ответы (7)


Например:

неявный вызов активности

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

<activity android:name=".BrowserActivitiy" android:label="@string/app_name">
   <intent-filter>
      <action android:name="android.intent.action.VIEW" />
      <category android:name="android.intent.category.DEFAULT" />
      <data android:scheme="http"/> 
   </intent-filter>
</activity>

И другой способ вызвать неявное намерение ниже:

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.example.com"));
startActivity(intent);

Явный вызов активности

Вы делаете вызов, который указывает, какой именно класс активности:

Intent intent = new Intent(this, ActivityABC.class);
intent.putExtra("Value", "This value for ActivityABC");
startActivity(intent);

Надеюсь, это поможет вам лучше понять явный и неявный вызов активности в android.

Подробнее об Android Intent можно узнать здесь

person MichaelP    schedule 23.04.2012

  1. Явные намерения используются для вызова определенного компонента. Когда вы знаете, какой компонент вы хотите запустить, и вы не хотите давать пользователю свободный контроль над тем, какой компонент использовать. Например, у вас есть приложение, которое имеет 2 действия. Действие A и действие B. Вы хотите запустить действие B из действия A. В этом случае вы определяете явное намерение, нацеленное на действие B, а затем используете его для прямого вызова.
  2. Неявные намерения используются, когда у вас есть представление о том, что вы хотите сделать, но вы не знаете, какой компонент следует запустить. Или, если вы хотите дать пользователю возможность выбирать между списком компонентов для использования. Если эти намерения отправляются в систему Android, она ищет все компоненты, зарегистрированные для определенного действия и типа данных. Если найден только один компонент, Android запускает этот компонент напрямую. Например, у вас есть приложение, которое использует камеру для съемки фотографий. Одной из особенностей вашего приложения является то, что вы даете пользователю возможность отправлять сделанные им фотографии. Вы не знаете, какое приложение у пользователя может отправлять фотографии, и вы также хотите дать пользователю возможность выбрать, какое внешнее приложение использовать, если у него их несколько. В этом случае вы не будете использовать явное намерение. Вместо этого вы должны использовать неявное намерение, в котором для действия установлено значение ACTION_SEND, а для дополнительных данных установлено значение URI фотографии.

Явное намерение всегда доставляется к цели, независимо от того, что оно содержит; фильтр не консультируется. Но неявное намерение доставляется компоненту только в том случае, если оно может пройти через один из фильтров компонента.

person Varun Bhatia    schedule 22.12.2013

См. Разрешение намерений здесь

http://developer.android.com/guide/topics/intents/intents-filters.html

Явные намерения (действия) относятся к определенному классу и, как правило, доступны только для ваших пакетов. Неявные намерения относятся к фильтрам намерений, когда приложения публично объявляют, что они могут обрабатывать определенные типы данных или могут предоставлять определенные услуги, например. Отправить письмо. С неявными намерениями пользователи выбирают, какое действие (обычно пакет) использовать для обработки намерения, или, если установлен обработчик по умолчанию, он запускается.

person Simon    schedule 22.04.2012

Когда какой использовать?

Явное намерение: когда вы знаете, какой компонент может обработать ваш запрос. Таким образом, вы явно указываете имя этого компонента в намерении.

Intent i = new Intent(context,DetailActivity.class);  // DetailActivity.class is the component name
startActivity(i);

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

Пример: Воспроизведение музыки

Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(file);
startActivity(intent);

Как решает ОС?

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

Таким образом, более безопасным способом вызова неявного намерения было бы это

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(file);
if (intent.resolveActivity(getPackageManager()) != null) {
    startActivity(intent);
}
person Rohit Singh    schedule 22.12.2017

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

Обзор:

В Неявных намерениях пользователь неявно сообщает системе, ЧТО нужно сделать, не указывая, кто должен это делать.

В Явных намерениях пользователь явно указывает системе WHOM запускаться для любой работы.

person SaadurRehman    schedule 22.05.2019

Существует два типа намерений:

  • Явное намерение:

    При создании объекта Intent, когда мы явно указываем и передаем имя целевого компонента непосредственно в намерении, это явное намерение.

  • Неявное намерение:

    В этом случае мы делегируем задачу оценки зарегистрированных компонентов (регистрация обычно выполняется с использованием фильтров намерений, которые мы рассмотрим позже) Android на основе данных намерения и предполагаемого действия (например, отправить электронное письмо, сделать снимок, закрепить местоположение). на карте и т. д.), которые мы проезжаем. Таким образом, Android автоматически запускает компонент из того же приложения или другого приложения, которое может обрабатывать сообщение/задание о намерениях. Идея в этом случае заключается в том, что, скажем, нам нужно закрепить местоположение на map, для этого нам не нужно кодировать нашу собственную активность, чтобы справиться с этим. Вместо этого просто передайте данные о местоположении в приложение, такое как карты Google, которое может выполнять работу от имени нашего приложения.

источник: http://codetheory.in/android-intents/

person YOmna    schedule 30.12.2015

Неявное намерение не определяет компонент. Намерение предоставляет информацию о компоненте.

Intent intent=new Intent(Intent.ACTION_VIEW);  
intent.setData(Uri.parse("http://www.google.com"));
startActivity(intent); 

тогда как Явное намерение указывает компонент. Намерение предоставляет информацию о классе.

 Intent i = new Intent(this, ClassB.class);  
 startActivity(i); 
person Tisha    schedule 31.01.2020