2015-10-28 4 views
-2

Я знаю 2 способы создания Intent, они:Способы создания умысел:

Intent intent = new Intent(this, Activity2.class); 
startActivity(intent); 

И

Intent intent = new Intent(); 
intent.setClassName(com.example.android.somepackagename, com.example.android.somepackagename.Activity2); 
startActivity(intent); 

Я знаю, что и делать по существу то же самое, интересно, если есть были какие-то за кулисами различия, и если были особые случаи, когда нам НУЖНО использовать только один тип.

Спасибо

ответ

8

Я знаю, что и делать по существу одно и то же

Нет, они делают точно то же самое ... если com.example.android.somepackagename ваш собственный пакет.

Реализация конструктора два параметра является:

public Intent(Context packageContext, Class<?> cls) { 
    mComponent = new ComponentName(packageContext, cls); 
} 

Реализация setClassName() является:

public Intent setClassName(String packageName, String className) { 
    mComponent = new ComponentName(packageName, className); 
    return this; 
} 

Они оба установить ComponentName. Если вы заходите в источник ComponentName, тот, который принимает Context, просто вызывает getPackageName() на Context и использует это String.

setClassName() можно использовать для создания Intent, который идентифицирует компонент в отдельном пакете, который не может построить ваш конструктор Intent. Это относительно редко, поскольку мы обычно используем неявный Intents (например, new Intent(Intent.ACTION_VIEW, uri)) для поиска и вызова компонентов из других приложений.

0

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

Однако, есть еще один способ

Намерение я = новый Intent ("android.intent.action.someactivity");

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

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