Что такое packageContext в Intent # (Context packageContext, Class <?> Cls)?
В документе говорится:
packageContext A Контекст пакет приложений, реализующий этот класс.
Но что это значит? какой класс "этот класс"?
Почему new Intent(this,XXX.class)
работает?
Ответы
Ответ 1
Вы можете передать любой Context объект, который вы получили от любого из ваших классов приложений. Таким образом, вы можете либо использовать объект Activity, Service, либо вы можете вызвать getApplicationContext() и передать возвращенный объект Context в конструктор Intent.
Ответ 2
Подумайте о Контексте как состоянии вашего Приложения. Он используется для управления ресурсами и службами, используемыми приложением, такими как база данных, локальные файлы, загрузчики классов, общие настройки и т.д.
Когда кто-то звонит вам и спрашивает о вашем времени, что первое, что вы говорите... Что это касается? или в чем смысл этого разговора? В зависимости от контекста вы можете решить, стоит ли выполнять вызов или нет. Если вы продолжаете, разговор должен быть относительно простым, поскольку вы уже знаете контекст.
То же самое происходит с намерениями. Что такое намерение? Что-то, что имеет намерение - одно из них - начать действие.
Intent intent = new Intent(getApplicationContext(),ActivityTwo.class);
startActivity(intent);
Если это делает вашу концепцию немного более понятной, чем позволяет перейти к вашему вопросу и фактическому API -
Intent#(Context packageContext, Class<?> cls)
Как вы знаете, первый аргумент должен иметь тип Context, который, как мы знаем, является абстрактным классом. Обычно вы можете передать любой конкретный класс, который расширяет класс Context
class - Activity
, являющийся одним из них (в этом случае вы просто используете this
в аргументе).
![enter image description here]()
Ответ 3
Я думаю, что это должен быть контекст, связанный с пакетом приложений, реализующим текущий класс.
Например, если вы находитесь в классе собаки, и у вас есть следующая структура пакета com.mycompany.dogfinder.dog, тогда контекст пакета относится к контексту, связанному с пакетом, который реализует класс собаки. В этом случае контекст, связанный с классом dog, будет контекстом, связанным с пакетом приложений com.mycompany.dogfinder.
Мне потребовалось немного времени, чтобы понять, что было сказано, но я думаю, что это то, что это значит.
Ответ 4
Для начала деятельности по активности:
public SomeActivity extends Activity{
...
private startAnother(){
Intent intent = new Intent(getApplicationContext(), AnotherActivity.class);
startActivity(intent);// works fine
getApplicationContext().startActivity(intent)//works too,
//but flag Intent.FLAG_ACTIVITY_NEW_TASK needed and new you will get
//backstack offcourse
}
...
}
Назначение, использующее контекст для создания только ComponentName:
public Intent(Context packageContext, Class<?> cls) {
mComponent = new ComponentName(packageContext, cls);
}
// Identifier for a specific application component
public ComponentName(Context pkg, Class<?> cls) {
mPackage = pkg.getPackageName();
mClass = cls.getName();
}