getInstance () vs getApplication (), что лучше? [Дубликат]

Проверьте

 SELECT A.OtherID,  
     Split.a.value('.', 'VARCHAR(100)') AS Data  
 FROM  
 (
     SELECT OtherID,  
         CAST ('<M>' + REPLACE(Data, ',', '</M><M>') + '</M>' AS XML) AS Data  
     FROM  Table1
 ) AS A CROSS APPLY Data.nodes ('/M') AS Split(a); 
105
задан Brian Tompsett - 汤莱恩 7 June 2015 в 15:23
поделиться

4 ответа

Toast и Intent, оба требуют ссылки на контекст . И getApplication, getApplicationContext, LoginActivity.this и getBaseContext, все они предлагают ссылку на контекст.

Теперь это смущает декларация разных контекстов и их специфическое использование.

  1. Контекст приложения
  2. Контекст активности

  • Контекст приложения привязан к жизненному циклу приложения и всегда будет таким же на протяжении всего срока службы. Поэтому, если вы используете Toast , вы можете использовать контекст приложения или даже контекст активности (оба), потому что тост может быть поднят из любого места в вашем приложении и не привязан к окну.

    Контекст активности привязан к жизненному циклу Деятельности и может быть уничтожен, если возникает onDestroy() активности. Если вы хотите запустить новое действие, вам нужно будет использовать контекст активности в своем Intent , чтобы новая активность запуска была связана с текущей деятельностью (с точки зрения стека активности). Однако вы также можете использовать контекст приложения для запуска нового действия, но тогда вам нужно установить флаг Intent.FLAG_ACTIVITY_NEW_TASK в намерении рассматривать его как новую задачу.

    Теперь, ссылаясь на ваши случаи:

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

    getApplication(), хотя его ссылка на объект Application, но класс Application расширяет класс Context, поэтому его можно использовать для предоставления контекста приложения.

    getApplicationContext() предлагает контекст приложения.

    getBaseContext() предлагает контекст активности.

    Советы: всякий раз, когда вам нужно манипулировать Views, перейдите в Activity-Context, иначе Application-Context будет достаточно.

  • 184
    ответ дан Malwinder Singh 24 August 2018 в 01:46
    поделиться

    Class.this используется, если ваш класс расширяет действие getapplication (), используемое, ссылается на приложение и приложение, расширяет контекст приложения getbasecontext () ссылается на контекст контекста активности, ссылаясь на ваш жизненный цикл вашего приложения applicationcontext ссылается на ваш жизненный цикл приложения

    0
    ответ дан chandrakant Chaturvedi 24 August 2018 в 01:46
    поделиться

    Ответ Вакаса очень ясный и полный, однако я хотел бы еще раз пояснить разницу между использованием this против getBaseContext() или getApplication() против getApplicationContext(). Оба Activity и Application распространяются не на Context, а на ContextWrapper, который является

    «Проксирование реализации Context, которое просто делегирует все свои вызовы другому Context ".

    Этот« реальный »контекст - это то, что вы получаете с помощью getBaseContext().

    Итак, хотя this (для Activity) и getBaseContext() оба контекста активности, они

    • (a) не относятся к одному и тому же объекту ( this != getBaseContext()) и
    • (b) вызов контекста через this немного менее эффективен, так как вызовы проходят через дополнительный уровень косвенности. Я сомневаюсь, что это имеет какое-то практическое значение.

    То же самое относится к getApplication() vs. getApplicationContext().

    22
    ответ дан fawaad 24 August 2018 в 01:46
    поделиться
    LoginActivity.this 
    

    указанная выше строка - это Activity, которая является Obwiveously Контекстом. Это используется, когда вы создаете некоторые AlertDialogs ... В некоторых местах его обязательным для использования контекста активности ...

    getApplication()
    

    То же самое, что требует метод текстового текста. Контекст и само приложение реализует Context

    getApplicationContext()
    

    , это наиболее предпочтительный способ, так как этот Context работает до тех пор, пока приложение не выключится.

    getBaseContext()
    

    этот контекст доступен для виджетов и представлений ..

    Но все они дают объект Context и ничего больше.

    6
    ответ дан ngesh 24 August 2018 в 01:46
    поделиться
    Другие вопросы по тегам:

    Похожие вопросы: