Что такое 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();
    }