Что такое packageContext в Intent#(Context packageContext, класс cls)?
в документе сказано :
packageContext контекст пакет приложений, реализующий это класс.
но что это значит? какой класс "этот класс"?
почему new Intent(this,XXX.class)
работает?
4 ответов
вы можете пройти любой контекст объект, который вы получили от любого из классов приложения. Таким образом, Вы можете использовать объект Activity, Service или вызвать getApplicationContext() и передать возвращаемый объект контекста конструктору Intent.
подумайте о контексте как о состоянии вашего приложения. Он используется для управления ресурсами и службами, используемыми приложением, такими как база данных, локальные файлы, загрузчики классов, общие настройки и т. д.
когда кто-то звонит вам и спрашивает ваше время, что первое, что вы говорите... К чему это относится? или каков контекст этого разговора? В зависимости от контекста вы можете решить, стоит ли продолжать звонить или нет. Если вы продолжите, то разговор должен быть относительно легким, поскольку вы уже знаете контекст.
то же самое происходит с намерениями. Что такое намерение? То есть намерение - это позволяет начать работу.
Intent intent = new Intent(getApplicationContext(),ActivityTwo.class);
startActivity(intent);
если это делает вашу концепцию немного более ясной, чем позволяет перейти к вашему вопросу и фактическому API -
Intent#(Context packageContext, Class<?> cls)
поскольку у вас есть уведомления, первый аргумент должен иметь тип контекст который, как мы знаем, является абстрактным классом. Как правило, вы можете пройти любой конкретный класс, который расширяет Context
класса -
Я думаю, что это должен быть контекст, связанный с пакетом приложений, реализующим текущий класс.
например, если вы находитесь в классе dog и у вас есть следующая структура пакета com.mycompany.dogfinder.dog, затем контекст пакета ссылается на контекст, связанный с пакетом, который реализует класс dog. В этом случае контекст, связанный с классом dog, будет контекстом, связанным с com.mycompany.приложение dogfinder пакет.
Мне потребовалось некоторое время, чтобы понять, что было сказано, но я думаю, что это значит.
для запуска активности из активности:
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
}
...
}
намерение использовать контекст для создания только имени компонента:
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();
}