Что такое packageContext в Intent # (Контекст packageContext, ClassЦБС)? - PullRequest
20 голосов
/ 09 апреля 2011

В документе написано:

packageContext A Контекст пакет приложений, реализующий это класс.

Но что это значит? какой класс "этот класс"?

Почему new Intent(this,XXX.class) работает?

Ответы [ 4 ]

11 голосов
/ 09 апреля 2011

Вы можете передать любой Context объект, который вы получили от любого из классов вашего приложения. Таким образом, вы можете использовать объект Activity, Service или вызвать getApplicationContext () и передать возвращенный объект Context в конструктор Intent.

6 голосов
/ 04 марта 2015

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

Когда кто-то звонит вам и спрашивает у вас, что вы в первую очередь говорите... Что это за ссылка?или каков контекст этого разговора?В зависимости от контекста вы можете решить, стоит ли продолжать разговор или нет.Если вы продолжите, тогда разговор должен быть относительно простым, поскольку вы уже знаете контекст.

То же самое относится и к Intents.Что такое Намерение?Что-то, что имеет намерение - Одним из них является начало деятельности.

Intent intent = new Intent(getApplicationContext(),ActivityTwo.class);
startActivity(intent);

Если это делает вашу концепцию немного более понятной, чем давайте перейдем к вашему вопросу и фактическому API -

Intent#(Context packageContext, Class<?> cls)

Как вы уже заметили, первый аргумент должен иметь тип Context , который, как мы знаем, является абстрактным классом.Обычно вы можете передать любой конкретный класс, который расширяет класс Context - класс Activity, являющийся одним из них (в этом случае вы просто используете this в качестве аргумента).

enter image description here

1 голос
/ 05 февраля 2016

Я думаю, что это контекст, связанный с пакетом приложения, реализующим текущий класс.

Например, если вы находитесь в классе собаки и у вас есть следующая структура пакета com.mycompany.dogfinder.dog, то контекст пакета ссылается на контекст, связанный с пакетом, который реализует класс собаки. В этом случае контекст, связанный с классом dog, будет контекстом, связанным с пакетом приложения com.mycompany.dogfinder.

Мне потребовалось немного времени, чтобы понять, что говорится, но я думаю, что это означает.

0 голосов
/ 27 октября 2016

Для запуска действия из действия:

    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();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...