Подтвердить что ты не робот

Что такое packageContext в Intent # (Context packageContext, Class <?> Cls)?

В документе говорится:

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

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

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

4b9b3361

Ответ 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();
    }