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