Проверьте
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);
Toast и Intent, оба требуют ссылки на контекст . И getApplication, getApplicationContext, LoginActivity.this и getBaseContext, все они предлагают ссылку на контекст.
Теперь это смущает декларация разных контекстов и их специфическое использование.
Контекст активности привязан к жизненному циклу Деятельности и может быть уничтожен, если возникает onDestroy()
активности. Если вы хотите запустить новое действие, вам нужно будет использовать контекст активности в своем Intent , чтобы новая активность запуска была связана с текущей деятельностью (с точки зрения стека активности). Однако вы также можете использовать контекст приложения для запуска нового действия, но тогда вам нужно установить флаг Intent.FLAG_ACTIVITY_NEW_TASK
в намерении рассматривать его как новую задачу.
Теперь, ссылаясь на ваши случаи:
LoginActivity.this
, хотя его ссылка на ваш собственный класс, который расширяет класс Activity, но базовый класс (Activity) также расширяет класс Context, поэтому его можно использовать для контекста активности.
getApplication()
, хотя его ссылка на объект Application, но класс Application расширяет класс Context, поэтому его можно использовать для предоставления контекста приложения.
getApplicationContext()
предлагает контекст приложения.
getBaseContext()
предлагает контекст активности.
Советы: всякий раз, когда вам нужно манипулировать
blockquote>Views
, перейдите в Activity-Context, иначе Application-Context будет достаточно.
Class.this используется, если ваш класс расширяет действие getapplication (), используемое, ссылается на приложение и приложение, расширяет контекст приложения getbasecontext () ссылается на контекст контекста активности, ссылаясь на ваш жизненный цикл вашего приложения applicationcontext ссылается на ваш жизненный цикл приложения
Ответ Вакаса очень ясный и полный, однако я хотел бы еще раз пояснить разницу между использованием this
против getBaseContext()
или getApplication()
против getApplicationContext()
. Оба Activity
и Application
распространяются не на Context
, а на ContextWrapper
, который является
«Проксирование реализации
blockquote>Context
, которое просто делегирует все свои вызовы другомуContext
".Этот« реальный »контекст - это то, что вы получаете с помощью
getBaseContext()
.Итак, хотя
this
(дляActivity
) иgetBaseContext()
оба контекста активности, они
- (a) не относятся к одному и тому же объекту (
this != getBaseContext()
) и- (b) вызов контекста через
this
немного менее эффективен, так как вызовы проходят через дополнительный уровень косвенности. Я сомневаюсь, что это имеет какое-то практическое значение.То же самое относится к
getApplication()
vs.getApplicationContext()
.
LoginActivity.this
указанная выше строка - это Activity, которая является Obwiveously Контекстом. Это используется, когда вы создаете некоторые AlertDialogs ... В некоторых местах его обязательным для использования контекста активности ...
getApplication()
То же самое, что требует метод текстового текста. Контекст и само приложение реализует Context
getApplicationContext()
, это наиболее предпочтительный способ, так как этот Context
работает до тех пор, пока приложение не выключится.
getBaseContext()
этот контекст доступен для виджетов и представлений ..
Но все они дают объект Context и ничего больше.